길벗 출판사 제 26차 개발자 리뷰어 모집에 선정되어 작성한 리뷰 글입니다.
개요
함수형 프로그래밍과 자바에서 코틀린으로의 전환에 평소부터 관심이 있어서 길벗 개발자 리뷰 모집에 신청하게 되었다. 감사하게도 리뷰어로 선정되어 ‘객체에서 함수로’라는 책을 받아 리뷰를 작성하게 되었다. 이 책은 코틀린을 사용한 함수형 프로그래밍에 대한 내용을 담고 있으며, 주로 핸즈 온으로 실습을 통해 함수형 프로그래밍의 개념을 익히는 방식으로 진행된다.
책에서 다루는 내용
주로 생각나는 내용은 다음과 같다.
- 함수형 코틀린
- 참조 투명성
- TDD
- Functional Domain Modeling
- Functor
- Monad
- 함수형 오류 처리
- 함수형 이벤트 처리
- 함수형 프로그래밍에서 영속성 처리
- Logs
- 직렬화, 역직렬화
- 시스템 디자인
장점
1. 번역
IT서적을 읽을 때 가장 신경이 쓰이는 부분이 번역이다. 특히 IT 기술 서적의 경우 번역이 어색하면 내용 이해가 어려워지기 마련인데, 이 책은 기술 용어와 문맥이 적절히 조화를 이루어 문장이 자연스럽게 읽힌다.
2. 연습문제
각 챕터마다 연습문제가 있어서 실습을 통해 개념을 익히기에 좋다. 연습문제 답을 책에 제공하지 않고 github에서 볼 수 있는것도 좋은 점이다.
3. 부록
부록이 매우 풍성한 편이다. 부록에는 함수형 프로그래밍에 대한 전반적인 개념, 함수형 프로그래밍 관점에서의 코틀린 문법, 함수형 프로그래밍에 대한 이론적 배경, 추가 레퍼런스 등이 담겨있다. 본문이 핸즈온을 통한 프로젝트형 구성이다 보니 오히려 본문에 들어갔어야할 내용이 부록으로 빠진 느낌이다.
4. 프로젝트 중심
핸즈온으로 직접 웹 서버를 만들어보는 프로젝트 중심의 구성이다. 앱을 만들어가면서 기존의 객체지향적 설계관점에서 자연스럽게 함수형 설계로 전환하는 과정을 경험할 수 있다.
좀 아쉬운점
1. 난이도
좀 어렵다. 프로그래밍 언어를 하나 이상 할 줄 알고 객체지향 프로그래밍에 대해 이해하고 있으며 관련해서 프로젝트를 한두번 해본 개발자라면 진행하는데 크게 무리가 없을수 있겠지만 그렇지 않은 사람에게는 난이도가 높을 수 있다. 특히 프로그래밍 언어를 처음 접하는 사람에게는 난이도가 높을 수 있다.
2. 다루는 범위가 너무 넒음
구성상 어쩔 수 없는 부분도 있다고 생각하지만. TDD, 헥사고날, 단위테스트, 목, 스텁 등의 개념에 대해 너무 많은 부분을 할애한 느낌이다. 이런 개념들에 대해 사전에 들어보지 못했다면 책의 진행이 좀 어려울 수 있다. 책 자체는 좋지만 책 제목이랑은 약간 배치되는 느낌이다.
가져갈만한 문장들
읽으면서 좀 중요하다고 생각한 문장들을 정리해보았다.
문제를 함수적 시각에서 바라보면 어플리케이션은 단지 입력을 출력으로 변환하는 엔진으로 작동한다.
함수의 시그니처, 즉 입력과 출력의 타입을 정의하면 함수의 구현을 작성하기 전에 원하는 대로 함수를 구성할 수 있는지 확인할 수 있다. 이는 함수형 프로그램의 큰 즐거움 중 하나이다.
함수형 프로그래밍은 결국 사이드 이펙트를 최소화하고 프로그램의 가장 바깥쪽에 있는 사이드 이펙트를 유지하는 기술이라고 할수 있다.
함수적 의존관계 주입(DI) 을 사용해 DB나 원격 서비스나 메모리의 맵에서 목록을 가져와 갱신하는 작업을 수행하는 합수를 전달할 수 있다.
특히 기억할만한 문장
객체 지향 디자인에서 함수형 디자인의로의 전환은 도메인을 서로 협업하는 개체로 보는 것에서 불변하는 정보들이 변환되는 네트뤄크로 보는 것의 전환이다.
결국 어떤 때 함수형 프로그래밍을 쓰면 좋을까?
불변성 유지 및 상태관리, 병렬 처리 및 멀티스레딩, 데이터 변환, 코드 재사용, 테스트 용이성 등의 이유로 함수형 프로그래밍을 사용할 수 있다.
불변성 유지 및 상태 관리: 코드에서 상태 변화가 잦거나 복잡한 경우 함수형 프로그래밍은 불변 데이터 구조를 활용해 부작용을 최소화하고 예측 가능한 코드 흐름을 유지할 수 있다.
병렬 처리 및 멀티스레딩: 순수 함수는 부작용이 없기 때문에 병렬 처리나 멀티스레드 환경에서 안전하게 사용할 수 있습니다. 이를 통해 동시성 문제를 줄이고 효율적인 병렬 계산이 가능하다.
이 외에 데이터 변환,코드 재사용, 테스트 용이성 등의 이유로 함수형 프로그래밍을 사용할 수 있다.
이 책을 읽어면 좋은 사람
- 객체지향 프로그래밍이 익숙한 자바 개발자
- 코틀린을 사용해본 경험이 있는 사람
- 참조 투명성 , 고차함수, 람다, 펑터, 모나드 등의 함수형 프로그래밍 개념에 대해 알고 싶은 사람