동작 파라미터화와 함수형 프로그래밍 (2)
이번 포스팅에서는 지난번에 포스팅했던 함수형 프로그래밍을 통한 방법과 기존의 객체지향 관점의 디자인 패턴과 비교를 해보고자 합니다.
이 포스팅을 올리려고 생각한 이유는 현재 보고 있는 책인 "JAVA8 IN ACTION" 에서는 메소드를 코드로 넘기는 것을 통해 간단히 동작 파라미터화를 하는 것을 보여줌으로써, 기존의 전략 패턴을 사장시킬 수 있을까에 대한 생각이 들었습니다.
하지만 꼭 그런 것은 아닌 경우가 몇가지가 있었습니다.
1. 전략 자체가 상태를 가지고 있어야 하는 경우.
보통 전략 패턴을 사용하여, 전략 객체를 만들 때, 필자의 경우에는
* 전략이 상태를 가지고 있는 경우라면, interface를 만들고 concrete class 를 구현
* 전략이 상태를 가지지 않는 경우라면, enum을 사용해 singleton 으로 생성
으로 구현하였습니다.
함수형 프로그래밍에서 사용하는 메소드 역시, 특정 상태를 저장한 체로 유지할 수 없으며, 이는 상태가 필요한 전략에서는 사용할 수 없음을 말할 것 같습니다.
2. 전략 자체가 구현해야할 추상 메소드가 다수 있는 경우.
AppleFilter 예제에서는 간단히 필터의 역할만을 Predicate 인터페이스를 통해 함수 자체로 넘기는 것이 가능했지만 구현해야할 메소드가 다수라면 기존 전략 패턴을 사용해야 할 것으로 보입니다.
물론 기능단위로 더욱 쪼개거나, 동작을 파라미터로 더 받을 수도 있겠지만, 아래 UML과 같이 한 전략에 대해서 각 구현 클래스가 concrete하게 가지고 있는 것이 유지보수성에서 더 좋아보입니다. 특히 한 전략에 대해서 해야할 다른 일들이 늘어난다면 더욱 이 방법을 해야할 것 같습니다. ㅡㅡ^.
아직 모든 장을 만나본 것은 아니지만, 간단하게 처리할 수 있는 비지니스 로직은 함수형프로그래밍으로, 보다 재사용성이 높고 복잡도가 있는 작업은 기존 객체지향적인 사고가 필요하지 않을까라는 생각이 드네요.
(아직 책에서 이야기하는 함수형 사고가 안길러져서 그런 걸 수도 있습니다. ㅡㅡ^)
|
'개발이야기 > 함수형 프로그래밍' 카테고리의 다른 글
함수형 인터페이스 (0) | 2016.07.27 |
---|---|
람다 표현식 (0) | 2016.07.27 |
동작 파라미터화와 함수형 프로그래밍 (1) (0) | 2016.07.25 |
JAVA8 을 눈여겨봐야 하는 이유3 (기타 볼 내용) (0) | 2016.07.22 |
JAVA8 을 눈여겨봐야 하는 이유2 (스트림 API 등장) (0) | 2016.07.21 |