객체에서 함수로 – 책 소개

🗓️

함수형 프로그래밍을 제대로

길벗에서 책을 제공받아 자유롭게 작성된 서평입니다.

  • 원제 : From Objects to Functions: Build Your Software Faster and Safer with Functional Programming and Kotlin
  • 저자 : Uberto Barbini
  • 출간 : 길벗, 2024 / Pragmatic Programmers, 2023

함수형 프로그래밍은 순수 함수라는 뜻으로 참조 투명성을 통해 변하지 않는 결과값을 도출하면서 내부 가시성을 최소화 하고, 함수를 일급 시민으로 취급하여 함수를 반환하는 특징을 갖고있다. 함수라는 관점에서 객체를 중심으로 하는 객체지향과 다른 패러다임을 갖고 있으며 최근 유명한 함수형 프로그래밍 언어로는 Kotlin이 있다. 오늘 소개할 책은 이름에서 알 수 있듯이 객체지향 개발자들이 함수형 프로그래밍으로 넘어오기 위한 패러다임 전환을 도와주는 책이다.

이 책에서는 함수형 프로그래밍 패러다임에서 사용되는 고차 함수, 이벤트, 커맨드, 펑터 Functor, 모나드 Monad, 모노이드 Monoid, 어플리커티브 Applicative 같은 용어들이 주로 등장한다. 그래서 Kotlin 프로그래밍 언어 보다는 함수형 프로그래밍 자체에 대한 내용이 주를 이룬다. 기조에 맞게 프레임워크 없이 웹 어플리케이션 개발을 함수형으로 어떻게 풀어나가는지 보여준다. 여기서는 프레임워크 서적 단골 소재인 “TODO 관리” 어플리케이션으로 진행한다.

책이 특이했던점은 도메인 주도 테스트 DDT, 핵사고날 아키텍처 같은 모던한 개발 및 설계 이론에 대해서도 설명한다. 함수형 프로그래밍에 이러한 패러다임을 적용해 적합한 개발 방법을 도출하는 과정이 좋았다. 개인적으로는 Java 와 Spring Framework로 개발하는 사람으로써 함수형 프로그래밍을 넘어서 잘 작성된 한권의 아키텍처 책을 읽은 것 같았다.

여기서 언급되는 도메인 주도 테스트 Domain Driven Test 란, 시나리오 기반의 인수 테스트 Acceptance Test 를 넘어서 테스트에 비즈니스 도메인 용어를 차용해야 한다는 관점에서 시작된 개발 방법론이라고 한다. 이에 도달하기 위해 도메인은 단일 인터페이스를 통해 추상화된 구현을 사용해야 한다고 한다. 그럼으로써 테스트가 간소화 된다는 잇점이 있다고 한다. 또 흥미로웠던점은 TDD에서는 도메인부터 올라가는 Inside-out, 컨트롤러부터 내려우는 Outside-in 방식이 있는 반면, DDT는 어댑터-도메인-인프라-도메인-어댑터를 V자로 순환하며 개발하는 것을 책에서 진행하고 있었다. 개인적으로 이 방법은 업무에도 적용해보고 싶었다.

객체지향에서 레이어 추상화는 단지 인터페이스를 제공할 뿐이고 객체의 상태나 영속이 바뀐다는 단점이 있다면 함수형 프로그래밍에서는 커맨드와 이벤트라는 개념으로 상태의 변경을 분리하는 점이 인상적이엿다. 이벤트는 이미 발현된 상태 (승인됨, 삭제됨) 을 의미하고 커맨드는 그 이벤트에 도달하기 위한 컨텍스트 (승인, 삭제) 를 뜻한다고 한다. 이 과정에서 이벤트 스토어라는 개념을 통해 영속화를 분리하고 있다.

프레임워크를 사용하지 않고 웹 어플리케이션을 만드는 과정이 계속되면서 데이터베이스 접근 역시 함수형 프로그래밍 패러다임으로 어떻게 접근하는지 소개한다. 결론적으로 프로젝션 Projection을 만들어 쿼리를 통해 데이터베이스와 상호작용하고, JPA의 핵심기능인 더티체크 같은 영속성 컨텍스트 같은 개념을 함수형 패러다임으로 풀어내는 내용도 나온다.

함수형 프로그래밍에 대해서 설명하는 책이지만 Kotlin 문법 숙지가 되지 않으면 내용을 알게되는데까지 시간이 조금 걸릴것 같다. Kotlin 과 더불어 도메인 설계나 핵사고날 아키텍처에 대해 익숙하다면 책을 이해하는데 그리 어렵지 않을 것이다. 함수형 프로그래밍 뿐만 아니라 설계와 개발과 검증을 코드 베이스로 진행할 수 있을것이다. 그래서 Kotlin 에 익숙하지 않은 개발자를 위해 챕터 마지막에 설명 있고 부록으로 코틀린 안내서가 있다.

앞서 말했듯, 객체지향 프로그래밍을 하는 사람으로서 좋은 아키텍처 실습 책을 읽은것 같았다. Kotlin을 시작했다가 말았다가 했는데, 곧 Kotlin으로 Spring Framework를 다루는 방법부터 다시 다루게되면 그때는 꼭 시간을 내서 읽어야 하는 0순위 서적이 될것 같다.

길벗에서 책을 제공받아 자유롭게 작성된 서평입니다.