88일 차 - 람다식 (Lambda) (23.05.04)

yvonne·2023년 5월 4일
0

📂Java

목록 보기
48/51
post-thumbnail

📝 람다(Lambda)

📂 1) interface 내용 생략가능

Parameter와 함수 본체 사이 -> 표시

📂 2) 자바에서의 람다는 기본적으로 interface 구현

📂 3) 람다 구현을 위한 interface는 기본적으로 반드시 추상함수가 한개여야함

interface Printable{
   public abstract void print(String s);
   public abstract void print2(String s);
}
 -------> 람다 구현 X

📂 4) 람다를 위한 인터페이스란 의미의 애너테이션을 제공

@FunctionalInterface -> 추상함수 숫자 제한 가능  ( Printable에 오류 발생 )

📂 5) 매개변수가 1개인 람다식 ( (1) ~ (5) )

Printable prn = (String s) -> { 
       System.out.println(s);
    };
    prn.print("(1)");
   
    prn = (s) -> { 
       System.out.println(s);
    };
    prn.print("(2)");
  
    prn = s -> { 
       System.out.println(s);
    };
    prn.print("(3)");
 
    prn = s ->
       System.out.println(s);
    prn.print("(4)");

📂 6) 매개변수가 2개인 람다식

@FunctionalInterface
interface Calculate{
   void cal(int a,int b);
}

public class LamdaExample {
 public static void main(String args[]) {
    Calculate cal;
  
    cal = (int a,int b) -> {   
       System.out.println("(1)"+(a+b));
    };
    cal.cal(4, 3); 
   
    cal = (a, b) -> {   
       System.out.println("(2)"+(a+b));
    };
    cal.cal(4, 3); 
   
    cal = (a, b) ->    
       System.out.println("(3)"+(a+b));
    cal.cal(4, 3); 
 }
}

📂 7) 매개변수가 있고 반환하는 람다식

@FunctionalInterface
interface Calculate2{
   int cal(int a,int b);
}

public class LamdaExample {
 public static void main(String args[]) {
   
    Calculate cal;
    Calculate2 cal2;
   
    cal2 = (a,b) -> {   
             return a+b;
    };
    // return 문의 중괄호는 생략 불가
   System.out.println(cal2.cal(3,5));

    cal2 = (a,b) -> a+b;
    // return 생략가능
    System.out.println("(2)"+cal2.cal(3,5));

	 }
}


Ex>
@FunctionalInterface
interface HowLong{
   int len(String s);
}

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

   HowLong h = s->s.length();
   System.out.println(h.len("안녕하세요"));

	 }
}

📂 8) Generic과 합쳐진 람다식

//람다식과 제네릭
interface Calculate3<T> {
	T cal(T a, T b); // 제네릭 기반의 함수형 인터페이스 
}

//interface Calculate3 {
//	Integer cal(Integer a, Integer b); // 메인에 Integer로 선언하면 이런 식으로 메모리에 저장
//}

✔ main

public class LambdaExample {

	public static void getHowLong(HowLong howLong, String s) {
		System.out.println(howLong.len(s));
	}

	public static void main(String[] args) {

		Calculate3<Integer> cl = (Integer a, Integer b) -> {
			return a + b;
		};
    }
profile
개발 연습장

0개의 댓글