Java/Lambda Expressions

[Lamda Expression] Anonymous Classes -> Lamda Expression

고인돌개발자 2021. 5. 23. 17:54

학습목표 : Anonymous Classes 예제를 람다식으로 풀어서 사용 할 수 있다.


람다 기본 문법 

 인터페이스자료형 객체명 = (parameter) -> 함수식 
 함수식이 하나일때는 한줄에 가능
 함수식이 하나 이상일때는 -> {      }; 로 처리해야 함.


이전과정 Anonymous Classes 를 Lamda 식으로 변환

 

변환 코드 

package team.study._lamda;


public class HelloWorldLamda {

	 /* Lamda 는 하나의 메서드만 허용 */
	@FunctionalInterface
	 interface HelloWorld {
	        public void greet();	        
	   }
	
	 /* Lamda 는 하나의 메서드만 허용 */
	@FunctionalInterface
	 interface HelloWorld2 {
	        public void greetSomeone(String someone);
	   }
	  
	    public void sayHello() {
	        
	    	/* 전통적인 인터페이스 구현체 */
	        class EnglishGreeting implements HelloWorld {
	            String name = "Hello";
	            public void greet() {
	                System.out.printf("%s world - Lamda \n",name);
	            }	           
	        }
	      
	        HelloWorld englishGreeting = new EnglishGreeting();
	        
	        /* 익명 클래스 사용 -> Lamda 식으로  */     
	        HelloWorld frenchGreeting = () -> {
	            String name = "tout le monde - Lamda";
	            System.out.println(name);
	        };
	        
	        /* 익명 클래스 사용 */
	        HelloWorld2 spanishGreeting = (String someone) -> {
	        	String name = someone;
	        	System.out.printf("Hola, %s , Lamda \n", name);
	        };
	        
	        
	        /* 인터페이스 구현체 실행 */
	        englishGreeting.greet();
	        
	        /* 익명클래스 실행 */
	        frenchGreeting.greet();
	        
	        /* 익명클래스 실행  */
	        spanishGreeting.greetSomeone("Ronaldo");
	    }

	    public static void main(String... args) {
	    	HelloWorldLamda myApp =
	            new HelloWorldLamda();
	        myApp.sayHello();
	    }            
	}

주의사항

lamda 는 인터페이스에 하나 이상의 메서드를 갖지 못한다. 반드시 하나만 사용 가능하다.

가독성을 위해 어노테이션 @FunctionalInterface 을 사용하자