-
-
멀티패러다임 프로그래밍 - 객체지향, 함수형, 명령형의 통합적 사고로 구현하는 소프트웨어 설계와 구현
유인동 지음 / 한빛미디어 / 2025년 4월
평점 :
"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."
이 책을 선택한 동기
개발 커뮤니티에서 '객체지향 vs 함수형' 주제를 의논하는 글을 많이봐왔습니다. 객체지향은 Flutter 개발을 하게되면서 차츰 이해할 수 있었지만, 함수형은 여전히 잘 모르는 영역이었어요.
그러던 중 멀티패러다임 프로그래밍이라는 책 제목을 보게 되었어요. 밸런스 게임처럼 '이것 아니면 저것'의 이분법적 사고에서 벗어나, 상황에 따라 필요한 패러다임을 조합해서 사용할 수 있다는 접근법이 신선했습니다. 함수형, 객체지향, 절차적 프로그래밍을 한 번에 조화롭게 이해할 수 있다는 기대감에 이 책을 선택할 수밖에 없었어요.
어떤 책인지
이 책은 제목 그대로 '멀티패러다임'에 대한 종합적인 가이드입니다. 총 7장으로 구성되어 있으며, 각 패러다임을 단순히 나열하는 것이 아니라 실제로 어떻게 조합해서 사용하는지에 중점을 두고 있어요.
1-3장에서는 이론적 기반을 다집니다. 객체지향의 반복자 패턴과 함수형의 일급 함수가 어떻게 만나는지, 자바스크립트의 이터레이션 프로토콜을 통해 실제 언어에서 어떻게 구현되는지 보여줍니다. 특히 LISP와 하스켈 같은 순수 함수형 언어의 개념들을 자바스크립트로 어떻게 가져올 수 있는지 설명해요.
4-5장에서는 실전으로 들어갑니다. 비동기 프로그래밍과 실제 데이터 처리 사례들을 다루면서, 함수형 프로그래밍이 단순한 이론이 아니라 실무에서 어떻게 활용되는지 보여줍니다. 특히 백엔드 비동기 처리나 커머스 데이터 다루기 같은 현실적인 예제들이 인상적이었어요.
6-7장은 종합편입니다. HTML 템플릿 엔진을 만들면서 객체지향과 함수형을 실제로 조합하고, Todo 앱과 Setting 앱을 통해 프런트엔드 개발에서의 멀티패러다임 적용법을 보여줍니다.
저자 유인동님의 접근 방식이 특히 좋았던 것은, 각 패러다임의 장단점을 이론적으로만 설명하는 게 아니라 '언제, 왜, 어떻게' 조합해야 하는지 구체적인 코드와 함께 보여준다는 점이었어요.
특히 인상적이었던 점
첫 챕터부터 머리를 한 대 맞은 기분이었습니다. '이터러블, 이터레이터, 제네레이터'를 통해 타입스크립트를 다양한 프로그래밍 방식으로 작성할 수 있다는 구체적인 사례를 보여주는데, 그 순간 제가 그동안 얼마나 기본기를 놓치고 있었는지 깨달았어요.
부끄럽지만 그렇게 숱하게 사용하고 있던 forEach, map, filter에 대해 저는 아무것도 몰랐다는 것을 알게되어죠…! 이들이 이터러블 객체를 다루는 방식이라는 것도 제대로 이해하지 못했고, 제네레이터는 책에서나 슬쩍 봤지 실제 구현에 활용한다는 생각을 해본 적이 없었어요. 고차함수, 일급함수도 마찬가지였습니다.
또한 타입스크립트 활용법에서 인상적이었습니다. 저는 그동안 타입스크립트를 아주 기초적인 부분만 사용하고 있었고, 제네릭도 때때로 쓰긴 했지만 정말 얕게만 활용하고 있었습니다. 아이러니하게도 멀티패러다임 프로그래밍을 알고 싶어 펼치게 된 이 책에서 타입스크립트를 더 잘 알게 되는 계기가 되었어요.
특히 타입스크립트의 제네릭과 클래스를 조합하는 방법, map 등의 고차함수를 체이닝으로 연결해서 훨씬 간결하고 자연스러운 흐름으로 읽을 수 있게 만드는 기법들이 정말 놀라웠습니다. 이런 기본기를 정확히 이해하면 이렇게까지 활용할 수 있다는 점이 충격적이었어요.
덕분에 무엇을 배웠는가
가장 큰 수확은 제가 그동안 절차형으로만 작성해왔던 코드를 완전히 다른 관점에서 바라보게 되었다는 점입니다.
1. 이터레이터와 제네레이터를 실제로 활용할 수 있겠다는 확신이 생겼어요. 책에서 보여준 FxIterable 클래스처럼 제네릭과 이터러블을 조합해서 체이닝 가능한 데이터 처리 파이프라인을 만드는 방법이 정말 인상적이었습니다. 단순히 배열에 forEach, map, filter를 쓰는 게 아니라, 지연 평가를 통해 성능까지 최적화할 수 있다는 점이 놀라웠어요.
2. 타입스크립트의 제네릭 활용 방법을 제대로 익혔습니다. 이전에는 단순히 타입 안전성을 위해서만 사용했는데, 이제는 함수형 프로그래밍과 객체지향을 조합하는 핵심 도구라는 것을 알게 되었어요. `FxIterable<A>`처럼 타입 파라미터를 통해 체이닝하면서도 타입 안전성을 보장하는 방식이 정말 우아하더라고요.
3. 비즈니스 로직을 멀티패러다임으로 작성해볼 용기가 생겼습니다. 이토록 기발한 아이디어로 만들어진 효율적인 프로그래밍 방식이지만, 팀원과 함께 싱크를 맞춰야 실무에서 적용할 수 있을 것 같아요. 독단으로 갑자기 적용하기 시작하면 팀 컨벤션이 무너지고, 코드를 보는 팀원들이 받지 않아도 될 스트레스가 늘어나겠죠...! 하지만 같이 공부하면서 적용하면 분명 다 같이 행복해길 것이라 생각해요!
좋았던 점
1. 체계적이고 점진적인 학습 구조
각 패러다임을 따로 설명하는 것이 아니라, 어떻게 조합되는지에 중점을 둔 구성이 정말 좋았습니다. 1장에서 이터레이터 패턴과 일급 함수의 만남을 보여주고, 2-3장에서 LISP와 하스켈의 개념을 자바스크립트로 가져오는 과정이 자연스럽게 이어졌어요. 특히 제네레이터로 이터레이터를 만드는 과정에서 명령형과 함수형이 어떻게 연결되는지 보여준 부분이 인상적이었습니다.
2. 실무 중심의 실전 예제와 적용법
4-5장의 비동기 프로그래밍과 실전 데이터 처리 사례들이 특히 도움이 되었어요. 단순한 이론 설명이 아니라 '커머스 데이터 다루기', '결제 프로세스 문제', '백엔드 비동기 처리' 같은 현실적인 문제들을 멀티패러다임으로 해결하는 방법을 보여줬습니다. 6-7장의 HTML 템플릿 엔진과 Todo 앱 만들기도 실제로 적용해볼 수 있는 구체적인 사례여서 좋았어요.
3. 다양한 언어와의 비교를 통한 개념 이해
하스켈, LISP(클로저), 코틀린, 스위프트 등 다른 언어들의 예제를 통해 멀티패러다임이 단순히 자바스크립트만의 특징이 아니라는 점을 보여준 것이 좋았습니다. 특히 하스켈의 함수 합성 연산자나 클로저의 매크로 시스템을 자바스크립트로 어떻게 가져올 수 있는지 설명한 부분이 인상적이었어요.
이를 통해 언어를 넘어 적용 가능한 개념이라는 패러다임의 본질을 이해할 수 있었습니다. 프론트엔드 개발자로서 Flutter(Dart)도 사용하는 입장에서, 다른 언어에서도 이런 접근법을 적용해볼 수 있겠다는 영감을 얻었어요.
조금 아쉬웠던 점
초보자에게는 다소 학습 곡선이 가파를 수 있습니다. 사실 저는 예제들을 이해하기에 조금 버거웠어요..! 첫 챕터부터 이터레이터, 제네레이터, 고차함수 개념들이 한꺼번에 나오면서 제 기본기 부족을 절실히 느꼈어요.
하지만 이것이 책의 문제라기보다는, 오히려 제가 기본기가 아직 탄탄하지 않다는 것을 깨닫게 해준 계기가 되었습니다. 어떻게든 읽어내려고 노력하면서 오히려 기본기를 강화할 수 있었어요.
다행히 저자님께서 설명하는 문장 자체는 무척 이해하기 쉽게 작성해주셨습니다. 특히 복잡한 예제에는 넘버링을 통해 단계별로 쉬운 문장으로 풀이를 작성해주신 부분이 정말 도움이 되었어요. 결과적으로는 한 단계 레벨업할 수 있는 기회가 되었습니다!
이 책을 읽은 덕분에 기대되는 변화
서두에 작성한 것처럼, 객체지향과 함수형 코딩에 대해 아직 깊게 익히지 못했음에도 이미 어느 한쪽을 택해서 개발해야 하는 건가라는 이분법적 사고에 빠져있었습니다. 그런데 이 책을 읽고 유연하게 조합을 하면 된다고 사고를 넓힐 수 있었어요!
프레임워크에 사고를 제한하지 않고, 언어 레벨에 대해 포커스를 맞출 수 있게 되었습니다. 특히 다른 언어에서는 이걸 어떻게 구현할 수 있었는지를 보여주는 대목들 덕분이죠. 저의 경우 Flutter를 사용하게 되며 조금씩 그 점을 느꼈는데, 멀티패러다임 프로그래밍을 읽은 덕분에 더 뚜렷하게 그려졌습니다.
이제 아주 작은 부분부터 각 프로그래밍 방식의 장점을 활용하는 로직을 만들어보려 해요. 이 내용은 동료들에게도 공유하며 함께 시각을 넓히고자 합니다!