[함수형사고] 6. 전진하라

함수형 언어의 디자인 패턴

함수형 언어계의 어떤 이들은 디자인 패턴이 개념 자체에 결함이 있기 때문에함수형 프로그래밍이 필요가 없다고 주장한다. 패턴의 좁은정의만 볼 때에는 일리가 있는 말이다.

함수형 프로그래밍에서는 전통적인 디자인 패턴들이 다음과 같이 세 가지로 나타난다.

함수 수준의 재사용

합성(주어진 매개변수와 일급 함수들의 형태로 이루어진다.) 은 함수형 프로그래밍 라이브러리에서 재사용의 방식으로 자주 사용된다.

객체지향프로그래밍에서는 함수를 재사용하기 위한 노력을 하는데 반해, 함수형 언어에서는 더 큰 단위로 재사용을 한다.

함수형 언어의 디자인 패턴

함수형 언어계의 어떤 이들은 디자인 패턴이 개념 자체에 결함이 있기 때문에함수형 프로그래밍이 필요가 없다고 주장한다. 패턴의 좁은정의만 볼 때에는 일리가 있는 말이다.

함수형 프로그래밍에서는 전통적인 디자인 패턴들이 다음과 같이 세 가지로 나타난다.

함수 수준의 재사용

합성(주어진 매개변수와 일급 함수들의 형태로 이루어진다.) 은 함수형 프로그래밍 라이브러리에서 재사용의 방식으로 자주 사용된다.

객체지향프로그래밍에서는 함수를 재사용하기 위한 노력을 하는데 반해, 함수형 언어에서는 더 큰 단위로 재사용을 한다.

image-20190719230313821

특정 부분을 재사용한다는 것은 위 도형에서 일부분을 나눈다는 의미이다.

image-20190719230408006

디자인 패턴이란? 결국, 함수의 결함을 메꾸기위한 도구이다.

이러한 관점에서 보면 사실 함수혐 프로그래머들도 코드를 재사용하고 싶어 하지만 그들은 서로 다른 빌딩블록을 사용한다. 일급함수를 사용하면 불필요한 구조물을 없앨 수 있기 때문에 탬플릿 메소드 디자인 패턴 구현하기가 쉬워진다.

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