"객체 지향적으로 설계"와 "서술적으로 설계"에서는
오라클에서 공식적으로 보여주는 튜토리얼입니다.
우리는 앞으로 이러한 설계방식을 따라야 하며
본문에서는 상황에 맞게 조금 각색했습니다.
원문(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)을 참고하여 같이 보면 좋습니다.
저는 이 예제를 보았을 때 자바의 우아함에 또 한 번 놀랐습니다.
난잡함 없이 제너릭스를 구현하는 기교나 자바만의 우직한 철학에 감동하였습니다.
다음 본문부터는 하나의 가상시나리오로 기술합니다.
아마도 이 강의에서 가장 철학적인 부분이 될 것 같군요.
프로그래밍 인생을 잠시 내려놓고
오로지 하나만을 추구하는 자바의 우아함을 받아들여 한 단계 성장하는 시간을 갖도록 합시다.
Person 객체를 정렬하는 단순한 프로그램을 Object-oriented Paradigm으로 설계하고자 합니다.
몇 개의 필드와 of 메소드를 가지고 있는 Person 클래스를 선언했습니다.
printOrderThan 메소드로 List에 있는 Person 중 age 필드가 14 이상인 Person을 출력하게 했습니다.
이제 개발 스펙은 변경되었고
기존 printOrderThan 메소드는 printBetweenAge로 변경됐습니다.
최종 변경사항입니다.
하지만 개발 스펙은 다시 바뀌고 필터를 추가해야 하는 상황이 됐습니다.
특정 나이 사이에 있고, 특정 Family Name을 가지고 있는 Person 객체를 추출하는 필터와
특정 글자가 이름에 포함되어 있으면 Person 객체를 추출하는 필터가 추가되었습니다.
이후 스펙에 따라 PersonChecker를 implement 하는 클래스를 매번 정의하는 것은
유연성이 없다고 판단, Anonymous class 형태로 호출하게 됩니다.