예시)
다음과 같이, Book 클래스가 존재한다.
페이지 수가 200 이하인 책을 필터링 할 수도 있고,
가격이 15000원 이하인 책을 필터링 할 수도 있고, 등등.. 다양한 요구사항이 올 수 있다.
동작 파라미터화를 이용한다면, 이처럼 변화하는 요구사항에 유연한 대응이 가능하다.
public class Book {
private String title;
private String author;
private String genre;
private int pages;
private int price;
public interface BookPredicate {
boolean test(Book book);
}
// 조건에 맞는 책을 필터링
public static List<Book> filterBooks(List<Book> books, BookPredicate predicate) {
List<Book> result = new ArrayList<>();
for(Book book : books) {
if(predicate.test(book))
result.add(book);
}
return result;
}
List<Book> shortBooks = filterBooks(bookList, (Book book) -> book.getPages() < 200);
List<Book> expensiveBooks = filterBooks(bookList, (Book book) -> book.getPrice() > 15000);
BookPredicate의 test() 함수만 구현하면 요구사항에 맞춰 유연한 필터링을 할 수 있다.