동적 파라미터화 (Behavior parameterization)
- 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록
- 나중에 실행될 메서드의 인수로 코드블록을 전달할 수 있다
- Ch1에서 언급한 바와 같이, 상위 Predicate을 두고 해당 Predicate을 상속하게 filtering method를 정의한 후에 메소드의 parameter로 filtering method를 넘겨주는 형태
- 이것이 바로 전략 디자인 패턴 (Strategy Design Pattern)
- 각 알고리즘을 캡슐화하는 알고리즘 패밀리를 정의해둔 다음, 런타임에 알고리즘을 선택하는 기법
- 하지만 이를 사용하게 되면 쓸데없는 코드가 늘어나는데 자바8은 람다 표현식으로 이 문제를 해결
- 왜 쓸데없는 코드가 늘어나나?
- 안타깝게도 메서드는 객체만 인수로 받기 때문에.. test 메서드를 Predicate 객체로 감싸서 전달해야했다
- 하지만 람다를 사용하면 객체로 감싸지 않고, 클래스를 정의하지 않고도 메서드의 인수로 사용할 수 있다
- 매번 구현하기 귀찮았던 클래스 -> 람다로의 변화과정 사이에는 익명 클래스가 있다
- 자바의 지역 클래스 (local class, 블록 내부에 선언된 클래스)와 비슷한 개념
- 익명 클래스 예시
- Runnable은 인터페이스이지만 객체화 되는 것처럼 보임
Thread t = new Thread(new Runnable() {
public void run() {
System.cout.println("hihi");
}
});