Modern Java In Action #9. 람다로 객체지향 디자인 패턴 리팩토링하기
모던자바인 액션에서 나온 객체지향 디자인 패턴을 람다로 리팩토링 하는 예제 입니다.
전략패턴
전략패턴은 런타임에 적절한 알고리즘을 선택하고 주입하는 기법이다.
예를 들어 입력 String값을 오직 소문자 또는 숫자로 이루어져있는지를 검증하는 Validator를 전략패턴을 통해서 만든다고 가정해보자.
1 | public interface ValidationStrategy { |
1 | public class isAllLowerCase implements ValidationStrategy { |
ValidationStrategy 인터페이스를 구현한 구체 클래스를 작성한다.
1 | public class Validator { |
실제 클라이언트에서 사용하는 코드
1 | public static main(String[] args){ |
람다 표현식 사용
위의 전략패턴을 보게되면, ValidationStrategy
인터페이스가 함수형 인터페이스이며 Predicate<String>
과 같은 함수 디스크립터를 갖고 있음을 파악했을 것이다.
Predicate<String>
함수 디스크립터란, String문자열을 파라미터로 넘기면 -> boolean을 리턴하는 것을 설명하는 함수형 인터페이스를 설명하는 것을 의미한다. Supplier, Consumer Function<T, R> 등등….
1 | Validator numericValidator = new Validator(s->s.matches("[a-z]+")); |
위와 같이 직접 ValidationStrategy 전략을 직접 람다식으로 넘겨줄 수 있다.
Modern Java In Action #9. 람다로 객체지향 디자인 패턴 리팩토링하기
https://umanking.github.io/2020/05/04/modern-java-in-action-9-design-pattern-to-lambda/