
동적 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다.
여기서 동적 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다.
→ 이 코드 블록의 실행은 나중으로 미뤄자는 것이 핵심이다. (코드 블록에 따라 메서드 동작이 파라미터화)
// 값을 나중에 결정
void print(String message) { ... }
// 동작을 나중에 결정
void process(List<Apple> list, Predicate<Apple> 동작) {
// **동작이** **뭔지는 호출할 때 결정됨**
}
enum Color { RED, GREEN }
public static List<Apple> filterGreenApples(List<Apple> inventory) {
List<Apple> result = new ArrayList<>();
for (Apple apple: inventory) {
if(**GREEN.equals(apple.getColor()**) {
result.add(apple);
}
}
return result;
}
녹색 사과 말고 빨간 사과도 필터링하고 싶다면?
→ filterRedApples 메서드를 새로 정의하거나, 기존 메서드 if문을 손보는 방법이 있다.
→ 당장에는 빨간 사과에 대한 해결이 가능하지만 다양한 색으로 필터링하는 상황에 적절하게 대응하기는 어렵다.