korjun1993 / cs-book-study

책을 읽고 토론하며 컴퓨터과학을 공부하는 공간
0 stars 1 forks source link

람다식과 함수형 인터페이스 #39

Open korjun1993 opened 1 year ago

korjun1993 commented 1 year ago

람다식이 무엇인가요?

// 인터페이스를 구현한 익명 클래스의 객체 MyFunction f = new MyFunction() { @Override public int max(int a, int b) { return a > b ? a : b; } }

// 위의 익명 객체를 람다식으로 대체 MyFunction f = (int a, int b) -> a > b ? a : b;


## 함수형 인터페이스가 무엇인가요?
- 람다식을 다루기 위한 인터페이스를 말한다. (위 예시의 `MyFunction`과 같은)
- 함수형 인터페이스에는 오직 하나의 추상 메서드만 정의되어 있어야 한다. (람다식과 추상 메서드가 1:1로 매칭되기 때문)
- 반면에 static 메서드와 default 메서드의 개수에는 제약이 없다.
- 람다식은 이름이 없을 뿐 분명히 객체인데도, `Object` 타입으로 형변환 할 수 없고, **오직 함수형 인터페이스로만 형변환**이 가능하다.
- 람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주된다.

```java
void method(int i) {
   int val = 30; // final int val = 30;
   i = 10; // 에러. 상수의 값을 변경할 수 없음.
   MyFunction f = () -> {
      System.out.println("i=" + i);
      System.out.println("val=" + val);
   }
}

java.util.function

함수형 인터페이스 메서드 설명
java.lang.Runnable void run() 매개변수도 없고, 반환값도 없음
Supplier T get() 매개변수는 없고, 반환값만 있음
Consumer void accept(T t) 매개변수만 있고, 반환값이 없음
Function<T, R> R apply(T t) 일반적인 함수
Predicate boolean test(T t) 조건식을 표현하는데 사용됨