본문 바로가기
개념/함수형사고

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

by hs_seo 2019. 3. 13.

사용하는 언어의 패러다임이 객체지향이러면 문제의 해법을 객체 지향적으로 찾게 됩니다. 하지만 현대의 스칼라같은 언어들은 멀티 패러다임을 지향합니다. 자바도 람다함수를 도입하면서 함수형 언어의 패러다임을 도입하였습니다. 따라서 문제에 적합한 패러다임을 사용하는 방법을 배우는 것이 더 좋은 개발자로 진화하는 길 중의 하나입니다.


함수형 언어의 디자인 패턴

함수형 프로그래밍에서 디자인 패턴은 다음의 세가지로 나타납니다. 첫째, 디자인 패턴은 언어나 런타임에 흡수 될 수 있습니다. 클로져의 ?. 문법이나, 스칼라의 커링과 같은 문법적 설탕이 이 역활을 지원합니다. 둘째, 패턴들은 그 의미를 보존하면서 다른 의미로 구현될 수 있습니다. 플라이웨이트 패턴은 메모이제이션 같은 기능을 이용하여 구현할 수 있습니다. 셋째, 함수형 언어와 런타임은 전적으로 다른 기능을 가질 수 있고, 그것들을 사용하면 같은 문제라도 다른 방식으로 해결할 수 있습니다. 다음은 소수를 구하는 문제를 커플링(상속)과 구성(static 함수 이용)을 이용하여 다르게 해결한 문제의 예입니다.


커플링과 구성을 이용한 코드 재사용예

먼저 명령형으로 자연수 분류와 소수를 찾는 함수를 구현한 예입니다.



커플링을 이용한 코드 재사용

위 클래스를 보면 ClassifierAlpha, PrimeAlpha는 동일한 isFactor(), factors() 메소드를 사용하고 있습니다. 따라서 객체지향에 맞게 코드를 재사용하기 위해서, 이를 슈퍼클래스로 추출하면 커플링을 이용해서 코드를 재사용할 수 있습니다.




구성을 사용한 코드 재사용

다음은 이 클래스를 코드의 재사용을 위해서 함수형 언어처럼 구성을 이용하여 구현해 보겠습니다. 이 클래스는 모두 Factors클래스를 이용하지만, 클래스를 상속하지 않고, of() 메서드만을 이용하고 있습니다.



반응형