YJ의 새벽

JAVA ( 람다식 ) 본문

SelfStudy/JAVA

JAVA ( 람다식 )

YJDawn 2023. 2. 9. 01:26

 

  • 람다식??

 

함수는 일반적 용어, 메서드는 객체지향개념.

함수는 클래스에 독립적, 메서드는 클래스에 종속.

근본은 같다.

--익명(이름이없는) 함수

--함수 (메서드) 를 간단한 식 으로 표현하는 방법.

 

--반환값이 있을때, return 문 생략가능.  (  ; 세미콜론 ) 안붙인다.

 

--람다식은 익명 함수가 아니라 익명 객체이다 !

 

public class Example2 {
	public static void main(String[] args) {

	//	Object obj = (a , b) -> a > b ? a : b ;   //람다식 , 익명객체.
		Object obj = new Object() { 
			int max ( int a , int b ) {      // <--람다식을 풀어서 쓴다면
				return a > b ? a : b ;
			}
		};	
		int value = obj.max(3 , 5);  // Object 에는 max() 가 없다.  오류.
                                      //사용하려면, 함수형 인터페이스 필요.	
	}                          
}

 

 

  • 함수형 인터페이스 ?

 

--단 하나의 추상 메서드만 선언된 인터페이스.

@FunctionalInterFace

--함수형 인터페이스 타입의 참조변수로, 람다식을 참조할 수 있다.

public class Example2 {
	public static void main(String[] args) {

	//	Object obj = (a , b) -> a > b ? a : b ;   //람다식 , 익명객체.
//		MyFunction f = new MyFunction() { 
//			public int max ( int a , int b ) {      // <--람다식을 풀어서 쓴다면
//				return a > b ? a : b ;
//			}
//		};	
		MyFunction f = (a , b) -> a > b ? a : b ;    // 람다식.익명객체
		                                        //람다식다루기위한 참조변수 타입은
		                                        //함수형 인터페이스.
		
		int value = f.max(3 , 5);  // 사용하려면, 함수형 인터페이스 필요.	
		System.out.println(value);   //5
	}
}

@FunctionalInterface    // 단하나의 추상메서드를 가지고있는지 확인해줌.
interface MyFunction {
	public abstract int max(int a, int b) ;  //추상메서드를 이용하여
	                                     // 람다식(max) 를 불러옴.
}

 

 

    EX ))) 여러 람다식 사용방법.

 

@FunctionalInterface
interface MyFunction {
	void run();    //  == public abstract void run()
}

public class Example2 {
	
	static void execute(MyFunction f) {     //매개변수타입이 MyFunction인 메서드 
		f.run();
	}
	
	static  MyFunction getMyFunction() {      //반환타입이 MyFunction인 메서드
		//MyFunction f = () -> System.out.println("f3.run()");
		//return f;      한줄로줄이면
		return () -> System.out.println("f3.run()");
	}
	
	public static void main(String[] args) {
		
		MyFunction f1 = () -> System.out.println("f1.run()");  //람다식으로 run구현
		
		MyFunction f2 = new MyFunction() {     //익명클래스로 run구현
			public void run() {            //public 반드시 붙이기.
				System.out.println("f2.run()");
			}
		};
		MyFunction f3 = getMyFunction();
		
		f1.run();     //"f1.run"
		f2.run();     //"f2.run"
		f3.run();     //"f3.run"
		
		execute(f1);      // "f1.run"
		execute( () -> System.out.println("run()") );     // "run()"
	}
}

 

 

 

 

 

 

 

 

 

 

'SelfStudy > JAVA' 카테고리의 다른 글

JAVA ( 메서드참조 )  (0) 2023.02.09
JAVA ( 함수형인터페이스 )  (0) 2023.02.09
JAVA ( 쓰레드의 동기화 )  (0) 2023.02.08
JAVA (쓰레드의 메서드)  (0) 2023.02.07
JAVA ( 데몬 쓰레드 )  (0) 2023.02.07
Comments