메서드가 받게 될 다양한 동작을 추상화해, 내부적으로(=알아서) 수행하도록 하는 것
어떻게 실행할 것인지 아직 결정하지 않은 코드 블록 (→ 코드 블록은 나중에 실행)
장점 : 다양하게 변화하는 클라이언트의 요구사항에 유연하게 대응 가능
전략 디자인 패턴
이라고 한다.단점 : 여러 클래스를 구현해 인스턴스화하는 과정 필요 → 익명 클래스
를 사용해 개선!
이름이 없는 클래스
블록 내부에 선언되어야 익명처리를 할 수 있다.
장점 : 클래스 선언과 인스턴스화를 동시해 할 수 있으므로 필요한 구현을 즉시 사용 가능
단점 : 코드가 장황해져 구현 및 유지보수가 비효율적 → 람다 표현식
를 사용해 개선!
메서드로 전달할 수 있는(=call back) 익명 함수(anonymous function)을 단순화한 것
람다의 특징
익명
이라고 표현한다.함수
라고 부른다.람다는 함수형 인터페이스
에서 사용할 수 있다.
함수형 인터페이스 : 오직 하나의 추상 메서드만을 정의하는 인터페이스
람다 표현식으로 함수형 인터페이스 구현을 직접 전달할 수 있으므로,
전체 표현식을 함수형 인터페이스의 인스턴스로 취급할 수 있다.
대표적인 함수형 인터페이스와 그에 대응하는 함수형 디스크립터
함수형 인터페이스 | 함수 디스크립터 | 추상 메서드명 | 비고 |
---|---|---|---|
Function<T, R> | 파라미터 : O 리턴값 : O | apply | |
Predicate | 파라미터 : O 리턴값 : O (boolean type) | test | Fuction의 한 종류 |
Consumer | 파라미터 : O 리턴값 : X | accept | |
Supplier | 파라미터 : X 리턴값 : O | get | |
Runnable | 파라미터 : X 리턴값 : X | run | 자연계에 존재하지 않음 |
람다 캡쳐링 : 자유 변수(파라미터 외부에서 정의된 변수)를 활용하는 것
람다는 인스턴스 변수와 static 변수를 자신의 바디에서 참조(=캡쳐)할 수 있다.
특정 람다 표현식을 축약한 것
기존의 메서드 정의를 재활용해서 람다처럼 전달할 수 있다. (Customize 가능)
간결하게 표현할 수 있어 가독성이 좋다.
메서드명 앞에 구분자(::)
를 붙여서 표현한다.