람다식 해보죠

 

함수형 인터페이스는 추상 메소드를 하나만 갖는다
인터페이스에 @FunctionalInterface 어노테이션을 붙이면 그 인터페이스는 함수형 인터페이스가 되어 무조건 추상메소드를 하나만 가져야한다.

 

인터페이스 생성

//인터페이스

	@FunctionalInterface   // 있어도 없어도 됨 아래 인터페이스는 함수형이라는 걸 알려주는 표시
	public interface MyInterface {
		
	int calc(int a, int b);
    
	//void a();   놉! 이거안돼! 추상메소드 하나만 가능해!

인터페이스를 상속받은 클래스 생성

public class MyInterfaceImpl implements MyInterface{
	// + 기능 하나만 정의 가능
	@Override
	public int calc(int a, int b) {	
		return a+b ;
	}		
}

메소드구현

public class MyCalculator {

		// 인자에 람다식(익명함수)을 받는 메소드
        static void paramMethod(MyInterface lambda,int a, int b){
        	 System.out.println(lambda.calc(a, b));
        }
        
        //람다식을 반환하는 메소드
        static MyInterface returnMethod(int z){
        	return(x,y) -> x*y+z;
        }

	public static void main(String[] args) {
    	
        //방법1. 인터페이스를 구현 한 클래스 사용:더하기만 가능, 재사용도 가능(MyInterfaceImpl타입 객체 또 생성가능)
    	System.out.println("[인터페이스를 구현한 클래스 사용:더하기만 가능]");
        MyInterface my1 = new MyInterfacelmpl();
         System.out.println(my1.calc(10, 5));
                          
        //방법2. 익명 클래스로 구현, 즉 별도의 클래스 필요x  코드 간결, 재사용은 불가
        System.out.println("[익명 클래스 사용:다른 연산 가능]");
        MyInterface my2 = new MyIntrerface(){
         		@Override
				public int calc(int a, int b) {			
				    return a+b;
				}			
         };
          System.out.println(my2.calc(10, 5));	
          
             my2 = new MyInterface() {		
			    @Override
			    public int calc(int a, int b) {				
				     return a-b;
			      }		
		 };
          System.out.println(my2.calc(10, 5));
     
        //방법3. 람다식 사용.클래스 불필요.방법2 보다 코드 더 간결. 단, 재사용은 불가. 추상 메소드 하나로 다양한 기능 구현.
          System.out.println("람다식 사용: 다른 연산 가능");
          //※람다식은 MyInterface의 추상메소드 형태여야한다
            MyInterface lambda = (a,b) -> a+b;
          	  System.out.println(lambda.calc(10,5));
              lambda = (a,b) -> a-b;
          	  System.out.println(lambda.calc(10,5));
              lambda = (a,b) -> a*b;
          	  System.out.println(lambda.calc(10,5));
              lambda = (a,b) -> a/b;
          	  System.out.println(lambda.calc(10,5));
         //람다식(익명함수)을 메소드의 인자로 전달
         	  lambda = (a.b) -> a%b;
               paramMethod(lambda,10,3);
          //   paramMethod( (a,b) -> a%b ,10,3); 굳이 변수에 안담고 요렇게도 당연 가능!!
               
          //람다식을 반환하는 메소드      
               System.out.println(returnMethod(10).calc(10,5));
 
		}///m	
}//////c

+ Recent posts