함수형 언어의 디자인 패턴
함수형 언어계의 어떤 이들은 디자인 패턴이 개념 자체에 결함이 있기 때문에함수형 프로그래밍이 필요가 없다고 주장한다. 패턴의 좁은정의만 볼 때에는 일리가 있는 말이다.
함수형 프로그래밍에서는 전통적인 디자인 패턴들이 다음과 같이 세 가지로 나타난다.
- 패턴이 언어에 흡수된다.
- 패턴 해법이 합수형 패러다임에도 존재하지만, 구체적인 구현방식은 다르다.
- 해법이 다른 언어나 패러다임에 없는 기능으로 구현된다.(예를 들어 메타프로그래밍을 사용한 해법들은 깔므하고 멋있다. 이런 해법은 자바에서는 불가능하다.)
함수 수준의 재사용
합성(주어진 매개변수와 일급 함수들의 형태로 이루어진다.) 은 함수형 프로그래밍 라이브러리에서 재사용의 방식으로 자주 사용된다.
객체지향프로그래밍에서는 함수를 재사용하기 위한 노력을 하는데 반해, 함수형 언어에서는 더 큰 단위로 재사용을 한다.
함수형 언어의 디자인 패턴
함수형 언어계의 어떤 이들은 디자인 패턴이 개념 자체에 결함이 있기 때문에함수형 프로그래밍이 필요가 없다고 주장한다. 패턴의 좁은정의만 볼 때에는 일리가 있는 말이다.
함수형 프로그래밍에서는 전통적인 디자인 패턴들이 다음과 같이 세 가지로 나타난다.
- 패턴이 언어에 흡수된다.
- 패턴 해법이 합수형 패러다임에도 존재하지만, 구체적인 구현방식은 다르다.
- 해법이 다른 언어나 패러다임에 없는 기능으로 구현된다.(예를 들어 메타프로그래밍을 사용한 해법들은 깔끔하다. 이런 해법은 자바에서는 불가능하다.)
함수 수준의 재사용
합성(주어진 매개변수와 일급 함수들의 형태로 이루어진다.) 은 함수형 프로그래밍 라이브러리에서 재사용의 방식으로 자주 사용된다.
객체지향프로그래밍에서는 함수를 재사용하기 위한 노력을 하는데 반해, 함수형 언어에서는 더 큰 단위로 재사용을 한다.
특정 부분을 재사용한다는 것은 위 도형에서 일부분을 나눈다는 의미이다.
디자인 패턴이란? 결국, 함수의 결함을 메꾸기위한 도구이다.
이러한 관점에서 보면 사실 함수혐 프로그래머들도 코드를 재사용하고 싶어 하지만 그들은 서로 다른 빌딩블록을 사용한다. 일급함수를 사용하면 불필요한 구조물을 없앨 수 있기 때문에 탬플릿 메소드 디자인 패턴 구현하기가 쉬워진다.
00. 템플릿 메서드 패턴
abstract class Customer{
def plan
def Customer(){
plan=[]
}
def abstract checkCredit()
def abstract checkInventory()
def abstract ship()
def process(){
checkCredit()
checkInventory()
ship()
}
}
class CustomerBlocks {
def plan, checkCredit, CheckInventory, Ship
def CustomerBlocks(){
plan = []
}
def process(){
checkCredit()
CheckInventory()
Ship()
}
}
---
def process(){
checkCredit?.call()
CheckInventory?.call()
Ship?.call()
}
조금 더 자세한 내용은 다음 PPT를 보면 이해할 수 있습니다.
https://www.slideshare.net/JoenggyuLenKim/deep-dive-functional-thinking
'행위 돌아보기' 카테고리의 다른 글
[동영상 정리]의존성을 이용해 설계 진화시키기 - 조영호 님 (0) | 2020.08.21 |
---|---|
맛집 리스트 - 검색 (0) | 2019.07.28 |
함수형 사고 - [5] 진화하라. (0) | 2019.07.26 |
함수형 사고 - [4] 열심히보다는 현명하게 (0) | 2019.07.26 |
함수형 사고 - [3] 양도하라. (0) | 2019.07.21 |
댓글