1. 함수형 인터페이스
- 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라고 한다.
- 일단 먼저 람다식으로 정의된 익명 객체의 메서드를 호출하는 방법의 순서를 알아보자.
1. 첫 번째, 메서드를 정의한 클래스 또는 인터페이스가 무엇인지 확인한다.
( a라는 인터페이스에 max 추상메서드로 정의되어 있다. )
2. 두 번째, 해당 클래스 또는 인터페이스의 이름을 사용하여 참조변수를 생성한다.
3. 세 번째, 마지막으로 참조변수에 람다식을 써 준다.
( 만약 익명클래스의 객체로 작성하면 아래와 같이 생성된다. )
( 또한 함수형 인터페이스에는 오직 하나의 추상 메서드만 정의되어 있어야 한다는 제약이 있다. )
( 그렇게 해야 1:1로 매칭될 수 있기 때문이다. )
( 반면 static과 default을 사용한 메서드의 개수는 제약이 없다. )
- 추가적으로 함수형 인터페이스 위에 '@FunctionalInterface'를 붙이면 컴파일러가 올바르게 작성되었는지
확인해주므로, 꼭 붙여주자.
1-1. 함수형 인터페이스를 이해하기 위한 예제(1)
: Collections.sort()에서 compare() 구현을 람다식으로 표현한 예제이다.
( list1은 원래 우리가 람다식을 배우기 전에 사용했지만, list2부터는 람다식을 이용해서
간단하게 표현할 수 있다. )
1-2. 함수형 인터페이스를 이해하기 위한 예제(2)
: 람다식을 매개변수, 반환타입으로 쓰는 예제이다.
( 우리가 객체를 주고받을 수 있듯이 람다식 또한 가능하다. )
2. 함수형 인터페이스의 람다식의 타입과 형변환
- 람다식은 익명 객체이고 익명 객체는 타입이 없다.
( 정확히 타입은 있지만, 컴파일러가 임의로 이름을 정하기 때문에 알 수 없는 것이다. )
- 또한 람다식은 오직 함수형 인터페이스로만 형변환이 가능하다.
- 아래의 코드를 보자.
3. 외부 변수를 참조하는 람다식
- 람다식 또한 익명 객체이므로, 외부에 선언된 변수를 접근 할 수 있다.
- 아래의 코드를 보고 이해하자.
( 람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주된다. )
( 그러므러, i와 val은 람다식 내에서 또는 다른 어느 곳에서도 값을 변경하는 것을 허용하지 않는다. )
( 그러나, Outer 클래스와 Inner 클래스 내에 있는 인스턴스 변수는 상수로 간주하지 않는다. )
'자바 > 람다식' 카테고리의 다른 글
메서드 참조 (0) | 2022.04.12 |
---|---|
Function의 합성과 Predicate의 결합 (0) | 2022.04.12 |
java.util.function 패키지 (0) | 2022.04.11 |
람다식의 기본 개념 (0) | 2022.04.11 |