메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

멀티패러다임 프로그래밍

객체지향, 함수형, 명령형의 통합적 사고로 구현하는 소프트웨어 설계와 구현

한빛미디어

집필서

판매중

  • 저자 : 유인동
  • 출간 : 2025-04-21
  • 페이지 : 512 쪽
  • ISBN : 9791169213738
  • eISBN : 9791169219334
  • 물류코드 :11373
  • 초급 초중급 중급 중고급 고급
4.8점 (19명)
좋아요 : 3

좋은 코드엔 프로그래밍 패러다임의 경계가 없다!
복잡한 문제를 해결하기 위해 
객체지향, 함수형, 명령형을 자유롭게 넘나들며 설계하고 구현하는 법 
견고한 코드, 유연한 문제 해결을 위한 멀티패러다임 프로그래밍의 모든 것

 

현대 개발에서는 객체지향, 함수형, 명령형 프로그래밍을 상황에 따라 유연하게 조합하는 역량이 필요합니다. 이 책은 세 가지 패러다임의 강점을 통합해 더 유연하고 견고한 소프트웨어를 설계할 수 있도록 실무 중심으로 설명합니다. 타입스크립트를 기반으로 반복자와 제너레이터, 리스트 프로세싱, 고차 함수 등 현대 언어의 기능을 폭넓게 활용하며, 프런트엔드와 백엔드 개발에 바로 적용할 수 있는 통찰을 제공합니다. 단순히 구현 방법을 알려주는 것에 머무르지 않고 ‘왜 그렇게 구현해야 하는가’를 설명해 개발자의 사고력과 설계 역량을 강화합니다. 더 나은 코드와 구조를 고민하는 개발자에게 이 책은 프로그래밍 시야를 확장하고 실무와 이론을 잇는 든든한 길잡이가 될 것입니다.

 

유인동 저자

유인동

마플코퍼레이션의 CTO이자 22년 차 소프트웨어 엔지니어. 카카오와 엔씨소프트 오픈마루팀에서 개발자로 근무했으며 넥슨, 네이버, 카카오 등 국내 주요 IT 기업의 개발자를 대상으로 기술 교육을 진행한 경험이 있다.
타입스크립트, 오브젝티브-C, 자바, Node.js, PostgreSQL, 클로저, 루비 온 레일즈 등 다양한 언어와 기술을 다루며 폭넓은 소프트웨어 개발 노하우를 쌓고 있다. 또한 객체지향 프런트엔드 개발 라이브러리인 rune-ts와 데이터베이스 쿼리 빌더 FxSQL을 직접 개발하고 함수형 라이브러리 FxTS 설계에도 참여하는 등 다양한 오픈소스 프로젝트에 기여했다. 최근에는 소프트웨어 공학을 사랑하는 온라인 커뮤니티 마플개발대학의 교수로 활동하며 지식을 공유하고 있다.

1장 멀티패러다임이 현대 언어를 확장하는 방법
1.1 객체지향 디자인 패턴의 반복자 패턴과 일급 함수 
__1.1.1 GoF의 반복자 패턴 
__1.1.2 ArrayLike로부터 Iterator 생성하기 
__1.1.3 ArrayLike를 역순으로 순회하는 이터레이터 만들기 
__1.1.4 지연 평가되는 map 함수 
__1.1.5 멀티패러다임의 교차점: 반복자 패턴과 일급 함수 
1.2 명령형 프로그래밍으로 이터레이터를 만드는 제너레이터 함수 
__1.2.1 제너레이터 기본 문법 
__1.2.2 제너레이터로 작성한 reverse 함수 
1.3 자바스크립트에서 반복자 패턴 사례: 이터레이션 프로토콜 
__1.3.1 이터레이터와 이터러블 
__1.3.2 언어와 이터러블의 상호작용 
__1.3.3 제너레이터로 만든 이터레이터도 이터러블 
1.4 이터러블을 다루는 함수형 프로그래밍 
__1.4.1 forEach 함수 
__1.4.2 map 함수 
__1.4.3 filter 함수 
__1.4.4 고차 함수 조합하기 
__1.4.5 재미난 filter 
1.5 이터러블 프로토콜이 상속이 아닌 인터페이스로 설계된 이유 
__1.5.1 Web API의 NodeList도 이터러블 
__1.5.2 상속이 아닌 인터페이스로 해결해야 하는 이유 
__1.5.3 인터페이스와 클래스 상속 
1.6 요약 정리

 

2장 함수형 프로그래밍과 타입 시스템 그리고 LISP
2.1 타입 추론과 함수 타입 그리고 제네릭 
__2.1.1 타입 추론 
__2.1.2 함수 타입과 제네릭 
2.2 멀티패러다임 언어에서 함수형 타입 시스템 
__2.2.1 이터레이션 프로토콜과 타입 다시 보기 
__2.2.2 함수형 고차 함수와 타입 시스템
__2.2.3 함수 시그니처와 중첩된 함수들의 타입 추론 
2.3 멀티패러다임 언어와 메타프로그래밍 - LISP로부터 
__2.3.1 Pipe Operator 
__2.3.2 클래스와 고차 함수, 반복자, 타입 시스템을 조합하기 
__2.3.3 LISP(클로저)에서 배우기 - 코드가 데이터, 데이터가 코드 
__2.3.4 클로저에서 map이 실행될 때 
__2.3.5 멀티패러다임 언어에서 사용자가 만든 코드이자 클래스를 리스트로 만들기 
__2.3.6 LISP의 확장성 - 매크로와 메타프로그래밍
__2.3.7 런타임에서 동적으로 기능 확장하기 
__2.3.8 언어를 확장하는 즐거움 
2.4 요약 정리

 

3장 코드 : 객체 : 함수 = Generator : Iterator : LISP = IP : OOP : FP
3.1 코드가 곧 데이터 - 로직이 담긴 리스트 
__3.1.1 [for, i++, if, break] - 코드를 리스트로 생각하기 
__3.1.2 현대 언어에서 리스트 프로세싱 - 클로저, 코틀린, 스위프트, 스칼라, C#, 자바 
__3.1.3 언어를 넘어 적용 가능한 개념, 패러다임 
3.2 하스켈로부터 배우기 
__3.2.1 하스켈의 함수와 함수 시그니처 
__3.2.2 언어 차원에서 지원하는 커링 
__3.2.3 main 함수와 IO 
__3.2.4 head, map, filter, foldl 함수 시그니처 
__3.2.5 함수 합성 - . 연산자와 $ 연산자 
__3.2.6 sumOfSquaresOfOddNumbers 함수 
__3.2.7 파이프라인 스타일 - & 
__3.2.8 Either를 통한 에러 처리 
__3.2.9 패턴 매칭 
3.3 지연 평가 자세히 살펴보기 
__3.3.1 중첩된 이터레이터의 실행 순서 - 제너레이터로 확인하기 
__3.3.2 자세히 살펴보기 
__3.3.3 이터레이터로 직접 살펴보기 
__3.3.4 단순화해서 살펴보기 
3.4 Generator :Iterator :LISP - 지연 평가와 안전한 합성 
__3.4.1 find 함수 시그니처 
__3.4.2 하스켈에서 find 함수와 안전한 합성 
__3.4.3 find 함수로 생각하는 지연 평가와 리스트 프로세싱 
__3.4.4 타입스크립트에서의 안전한 합성 
__3.4.5 every 함수 
__3.4.6 some 함수 
__3.4.7 지연 평가에 기반한 break 로직 끼워 넣기 
__3.4.8 every와 some 함수의 공통 로직을 함수형으로 추상화하기 
__3.4.9 concat으로 더하기 
3.5 요약 정리

 

4장 비동기 프로그래밍
4.1 값으로 다루는 비동기
__4.1.1 Promise __4.1.2 new Promise( )를 직접 사용해본 적 있는가 
__4.1.3 Promise.race 
__4.1.4 IO 작업에 타임아웃 설정하기 
__4.1.5 응답 속도에 따라 다른 전략으로 UI 렌더링하기 
__4.1.6 Promise.all 
__4.1.7 Promise.allSettled 
__4.1.8 Promise.any 
4.2 지연성으로 다루는 비동기 
__4.2.1 Promise 실행을 지연하려면 
__4.2.2 챗GPT가 명령형으로 구현한 동시성 핸들링 함수 
__4.2.3 함수형으로 구현한 동시성 핸들링 함수 
__4.2.4 효과적인 비동기 핸들링으로 가는 계단 - 지연성 
4.3 타입으로 다루는 비동기 
__4.3.1 AsyncIterator, AsyncIterable, AsyncGenerator 프로토콜 
__4.3.2 AsyncIterable을 다루는 고차 함수 
__4.3.3 동기와 비동기를 동시에 지원하는 함수로 만드는 규약 - toAsync 
__4.3.4 타입 시스템 + 비동기 함수형 함수 + 클래스
4.4 비동기 에러 핸들링 
__4.4.1 여러 이미지를 불러와서 높이 구하기 
__4.4.2 개선된 비동기 로직 
__4.4.3 에러가 제대로 발생되도록 하는 것이 핵심 
__4.4.4 안정적인 소프트웨어와 비동기 프로그래밍 
4.5 요약 정리

 

5장 실전 함수형 프로그래밍
5.1 실전 데이터 다루기 
__5.1.1 2차원 배열에서 숫자 다루기 
__5.1.2 농구팀 데이터 다루기 
__5.1.3 커머스 데이터 다루기
__5.1.4 커머스 데이터 다루기 2 
__5.1.5 일관된 접근 방식으로 문제 해결하기 
5.2 더 많은 문제에 적용하기 
__5.2.1 pipe 함수 
__5.2.2 pipe와 비동기 함수 합성 
__5.2.3 zip 함수 
__5.2.4 인덱스가 값으로 필요할 때 
__5.2.5 콜라츠 추측 - 1이 될 때까지 세기 
__5.2.6 break를 대신하는 take, takeWhile, takeUntilInclusive 
__5.2.7 함수의 조합으로 만들어내는 로직 
5.3 백엔드 비동기 프로그래밍 
__5.3.1 커머스 플랫폼의 결제 프로세스 문제 
__5.3.2 결제 내역 동기화 스케줄러 만들기
__5.3.3 해시 기반 접근으로 시간 복잡도 최적화
__5.3.4 안정적인 비동기 작업 간격 유지
__5.3.5 최대 요청 크기 제한을 효과적으로 처리하기
__5.3.6 사전 카운트로 효율 높이기
__5.3.7 병렬성으로 효율 높이기
__5.3.8 리스트 프로세싱 기반 비동기/동시성 프로그래밍
5.4 리스트 프로세싱 패턴화
__5.4.1 변형-누적 패턴
__5.4.2 중첩-변형 패턴
__5.4.3 반복자-효과 패턴
__5.4.4 필터-중단 패턴
__5.4.5 무한-중단 패턴
__5.4.6 분할-평탄 패턴
__5.4.7 변형-평탄 패턴
__5.4.8 결합-누적 패턴
__5.4.9 해시-매치 패턴
__5.4.10 리스트 프로세싱 함수 유형별 개념 정리
5.5 요약 정리

 

6장 멀티패러다임 프로그래밍
6.1 HTML 템플릿 엔진 만들기
__6.1.1 Tagged Templates
__6.1.2 리스트 프로세싱으로 구현하기
__6.1.3 push를 concat으로
__6.1.4 XSS 공격 방지
__6.1.5 중첩 데이터 처리로 컴포넌트 방식 개발 지원하기
__6.1.6 구조의 문제는 객체지향으로, 로직의 문제는 함수형으로 해결하기
__6.1.7 배열로부터 html 문자열 만들기
__6.1.8 객체를 함수형으로 더하기
__6.1.9 배열 처리를 클래스 내부로 이동하여 편의성 높이기
__6.1.10 고차 함수로 추상화하기
__6.1.11 작은 프런트엔드 개발 라이브러리 만들기
__6.1.12 멀티패러다임 언어가 제시하는 기회
6.2 멀티패러다임을 활용한 동시성 핸들링
__6.2.1 executeWithLimit 다시 보기
__6.2.2 챗GPT가 명령형으로 구현한 동시성 핸들링 함수
__6.2.3 멀티패러다임으로 구현한 동시성 핸들링 함수
__6.2.4 동시성(부하) 크기를 동적으로 변경할 수 있도록 확장하기
__6.2.5 무한 반복되는 작업의 부하 조절하기
__6.2.6 runAllSettled 추가하기
6.3 요약 정리

 

7장 객체지향 프런트엔드 개발 그리고 멀티패러다임적 접근과 응용
7.1 Setting 앱 만들기 
__7.1.1 SwitchView 
__7.1.2 SettingItemView 
__7.1.3 SettingListView 
__7.1.4 SettingPage 
__7.1.5 전체 토글 기능 추가하기 
__7.1.6 객체 간 통신과 커스텀 이벤트 디스패치 
__7.1.7 이벤트가 자꾸 루프에 빠지고 부수 효과가 발생하는 이유 
__7.1.8 타입 안전한 커스텀 이벤트 통신 패턴 
__7.1.9 재사용 가능한 컴포넌트 SwitchView 
__7.1.10 패러다임이 만드는 리액티브한 코드 
7.2 Todo 앱 만들기 
__7.2.1 CheckView
__7.2.2 추상 클래스와 상속
__7.2.3 Headless UI
__7.2.4 TodoItemView
__7.2.5 계층적 캡슐화를 통한 도메인과 UI 명명 불일치 관리
__7.2.6 TodoListView
__7.2.7 제네릭 클래스로 추상화
__7.2.8 TodoPage
__7.2.9 인터페이스에 기반한 객체 간 통신으로 중복 제거하기
__7.2.10 GoF의 디자인 패턴 관점으로 보기 - 전략 패턴
__7.2.11 일급 함수를 활용한 객체 간 통신 - 콜백 인젝션 패턴
__7.2.12 멀티패러다임적인 코드 설계
7.3 Todo 앱 만들기 2
__7.3.1 데코레이터로 코드를 간결하게
__7.3.2 TextSubmitView
__7.3.3 ListView에 헬퍼 메서드 추가하기
__7.3.4 새로운 Todo 생성하기
__7.3.5 SegmentControlView
__7.3.6 휴리스틱 기반 Diff로 DOM 업데이트 최적화
7.4 Todo 앱 만들기 3
__7.4.1 상태 패턴으로 유연하게 만들기
__7.4.2 상태 패턴 적용의 이점
__7.4.3 런타임에서도 변경 가능한 코드와 소프트웨어 동작
__7.4.4 상태 객체로 더 확장하기
__7.4.5 멀티패러다임 객체지향 설계
7.5 비동기와 UI, Promise와 Class
__7.5.1 Promise를 활용한 alert, confirm
__7.5.2 값으로서의 Promise, 컴포넌트 간 통신 매개
__7.5.3 그룹 채팅에 참여할 친구 선택하기

객체지향, 함수형, 명령형 이제는 선택이 아니라 조합!
다양한 패러다임을 이해하는 순간, 코드의 시야가 넓어집니다

객체지향, 함수형, 명령형은 더 이상 대립하거나 경쟁하는 개념이 아닙니다. 현대 언어들은 여러 패러다임을 포용하며 더욱 유연하고 강력한 도구로 진화하고 있습니다. 하지만 언어가 멀티패러다임을 지원한다고 해서 개발자가 자연스럽게 그 잠재력을 활용하게 되는 것은 아닙니다. 앞으로는 다양한 패러다임을 ‘어떻게’ ‘조화롭게’ 다룰 수 있는지가 더 중요합니다. 이 책은 그 과제에 실용적인 답을 제시합니다.
 

실제 서비스에서 마주하는 복잡한 문제를 어떻게 멀티패러다임적으로 사고하고 해결할 수 있을지 구체적인 코드와 함께 보여줍니다. 반복자 패턴, 고차 함수, 제너레이터 같은 객체지향과 함수형의 고급 개념을 하나의 맥락 속에서 통합해 설명하며 타입스크립트를 중심으로 LISP, 하스켈, 자바 등의 철학을 자연스럽게 연결해냅니다.
 

멀티패러다임 프로그래밍은 언어에 국한되지 않습니다. 프런트엔드 개발자는 자바스크립트의 본질과 새로운 설계 감각을, 백엔드 개발자는 비동기 프로그래밍을 잘 다루는 법과 효율적이고 안전한 데이터 처리 방법을 익히게 될 것입니다. 
 

★주요 내용

  • 멀티패러다임 프로그래밍 언어의 장점과 실용성
  • 함수형 프로그래밍과 타입 시스템 그리고 LISP
  • 실전 객체지향 프로그래밍
  • 지연 평가와 비동기 프로그래밍
  • 실전 함수형 프로그래밍
  • 여러 패러다임을 상황에 맞게 조합하는 방법

 

★대상 독자

  • 더 효율적이고 견고한 코드를 작성하고 싶은 분
  • 탄탄한 기본기 위에 고급 개념을 더하고 싶은 분
  • 중급 이상 개발자로 성장하고자 하는 분
  • 타입스크립트와 자바스크립트를 사용하는 프런트엔드 개발자
  • Node.js, Express.js, NestJS 등을 사용하는 백엔드 개발자
  • 특정 언어에 국한되지 않고 멀티패러다임 사고를 자신의 언어에 확장하고 싶은 분

 

★먼저 읽은 베타리더들의 한 마디

  • 이 책을 읽고 나서 그동안 무심코 사용한 문법이나 코드들 사이에 이미 멀티패러다임이 자리 잡고 있었다는 사실에 놀랐습니다. _김나영 (뱅크샐러드 건강팀 프런트엔드 개발자)
  • 코드 유지보수를 위해 많은 고민을 해왔습니다. 이러한 고민을 해결하기 위해 프로그래밍 패러다임은 꼭 거쳐야 하는 관문이었고 이 책 덕분에 시야가 한층 넓어졌습니다. _김만경 (나인아크 게임 서버 개발자)
  • 객체지향, 함수형, 명령형 등 다양한 프로그래밍 패러다임을 단순히 설명하는 것을 넘어, 멀티패러다임을 자유롭게 조합하여 활용할 수 있도록 돕는 실용적인 개발서입니다. _김영은 (백엔드 개발자)
  • 객체지향과 함수형 패러다임이 서로 조화롭게 공존할 수 있음을 알게 되었고 예제 코드를 통해 빠르게 이해할 수 있었습니다. _박소예 (프런트엔드 개발자)
  • 실무에서 자주 간과하기 쉬운 함수형 개념들을 탄탄하게 설명하고 실제 코드와 프로젝트에 어떻게 적용할 수 있는지를 구체적으로 보여줍니다. _서재완 (프런트엔드 개발자)
  • 프레임워크에 익숙해지면서 자칫 놓치기 쉬운 자바스크립트의 기본기를 탄탄히 다지는 데도 큰 도움이 되는 책입니다. _성현제 (프런트엔드 개발자)
  • 백엔드 개발자라면 한 번쯤 꼭 읽어보기를 권하고 싶은 책입니다. 단순히 기술을 겉핥기식으로 익히는 것이 아니라 그 본질을 꿰뚫고 깊이 있게 이해하는 데 큰 도움이 됩니다. _신윤수 (Node.js 백엔드 개발자)
  • 특정 언어에 국한되지 않고 프로그래밍 패러다임의 쓰임새를 확실히 구분하여 설계하는 방법을 배울 수 있습니다. _윤수혁 (웹 개발자)
  • 자바스크립트 언어를 깊게 이해하고 함수형과 객체지향 패러다임을 이해하고 적용할 수 있는, 두 마리 토끼를 잡을 수 있는 책입니다. _윤영선 (백엔드 개발자)
  • 어떤 패러다임을 채택하더라도 더욱 가독성 높고 효율적으로 데이터를 처리할 수 있게 도와줍니다. _이기웅 (프런트엔드 개발자)
  • 멀티패러다임적 사고가 어디까지 확장될 수 있을지 상상하게 만드는, 꼭 추천하고 싶은 책입니다. _임혁 (백엔드 개발자)
  • 이론과 실무 사이의 간극을 훌륭하게 메워주는 책입니다. 마치 옆에서 라이브 코딩을 하며 설명해주는 듯한 느낌이 들었습니다. _정동환 (프런트엔드 개발자)

왜 멀티패러다임이 필요한지 본질을 알게 해주는 저자의 내공에 놀랐고, 이론과 실무의 간극을 없애는 전달력에 한 번 더 놀랐다.

간만에 또 불세출의 명작이 등장했다. 10년 전에 읽었던 멀티패러다임 프로그래밍을 다룬 또 하나의 명작 “브루스 테이트의 세븐 랭귀지《Seven Languages in Seven Weeks》”의 신선함을 다시금 느끼게 해준 명작이 이번엔 국내 저자에 의해 출간되어 더욱 기쁘다.

세븐랭귀지는 Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell 등 7개의 언어를 다루면서 언어나 패러다임은 도구일뿐 개발자로 하여금 멀티패러다임을 통한 문제 해결 본질에 집중하게끔 나무보다 숲을 보는 안목을 키워줬던 책이다.

반면 본 도서는 앞선 도서 대비 국내 저자의 저술인만큼 가독성이나 전달력 측면에서 현저히 뛰어나고, 또 ES6나 ES2017 등 그 이후 10년 간의 변화를 살펴보며 멀티패러다임 프로그래밍이 어떻게 정착했는지를 엿볼 수 있다.

무엇보다 실무에 즉시 적용할 수 있는 예제가 풍부히 수록되고, 원리에서 출발하여 실무에 적용하는 과정 즉, 왜 활용하는지에 대한 부분을 구체적으로 보여줌으로써 이론과 실무의 간극을 메우는 구성이 탁월하다.

25년 전 대학시절 C언어로 온갖 서비스를 구현하는 고수 선배의 코딩을 어깨너머 지켜본 적이 있다. C언어로 인코더나 디코더를 직접 구현하며 cgi로 웹 프로그램을 만들고, socket 통신은 물론, 게임 등 장르를 가리지 않는 탁월함에 적잖이 놀랐다.

그 중 가장 인상깊었던 프로젝트는 당시 OOP 개념이 지금처럼 전방위에 퍼지지 않았던 시점임에도 절차지향 프로그래밍의 대명사였던 C언어를 가지고 OOP 흉내를 내는 과정이었다.

구조체를 객체와 유사하게 활용하고, 내부에 함수 포인터를 활용하여 메소드 처럼 활용하는 방식이었는데 그도 모잘라 define 매크로를 활용하여 마치 요즘의 타입 추론과 함수형 언어를 흉내내는 것이 영락없는 무림세계 그것도 마교의 교주 천마같은 느낌이었다.

그 과정을 지켜보는 것은 굉장히 흥미로웠는데 까마득한 후배인 나로써는 C언어를 저렇게 Pythonic하게 활용하는 것이 맞는지 궁금증이 들기도 했고, 때로는 안정성에 문제가 있을 것 같은 불안감이 들기도 했고, 그럼에도 필요한 요소요소마다 언어를 철저히 도구로 수려하게 활용함에 감탄하기도 했다.

이런 고수가 있었는가 하면 또 한편으로는 개발자 커뮤니티에선 별 쓰잘데기 없는 논쟁이 벌어지기도 햇다. C언어와 PHP언어 중 무엇이 훌륭하냐는 어리석은 논의였는데 프로그래밍을 당시 무협 세계에 종종 빗대었던 개발자들의 이상한 습성은 흡사 정사대전을 보는 듯 했다.

사실 문제의 본질을 파악하여 해결하기 위한 과정이 중요하기에 도구가 목적이 아닌이상 도구의 쓰임새를 논할일이지 그 자체의 우수성을 따지는 것은 정말 불필요한 논쟁이다. 그럼에도 그때는 범용 언어인 C언가 훨씬 잘낫다느니, 콩나물을 사러가는데 자전거를 타야지 쓸데없이 그랜저를 타고가는게 맞냐며 PHP를 옹호하는 등 각자 나름의 개똥철학을 펼치며 스스로가 좋아하는 문파(?)를 비호하는 어리석은 무림인이 널리고 널렸다.

아무튼 이 책은 다양한 언어들이 가진 특성을 제대로 이해하고 선택하며 문제해결에 최적의 방안을 찾기 위한 언어 및 패러다임의 장점만 뽑아낸 조화를 추구하는 책이다. 더 나아가 저자의 풍부한 경험을 바탕으로 이론과 실무의 간극을 메워준다.

저자는 국내 굴지의 기업에서 경험을 쌓았으며 타입스크립트, 오브젝티브-C, 자바, Node.js 등 다양한 언어를 다뤄왔고, fx.js 창시자로 오픈소스 메인테이너 활동까지 참여해 온 고수이다.

무엇보다 책의 내용과 전달력이 저자의 능력을 입증한다. 책의 내용은 마치 라이브코딩을 보는 듯 전달력이 뛰어나며, 구체적인 예시를 들어 Why 문제에 대한 본질을 전달하는 과정은 예술의 경지에 가깝다.

예를 들어 본문 중에 NodeList가 왜 상속이 아닌 interface를 활용했는지에 대한 답변을 예시를 통해 명쾌하게 설명한 부분이 있다.

한 컨트리뷰터가 NodeList에 Array를 상속받도록 작성하여 배포한 사례를 가정하는 부분이 좋은 예시가 되겠다. 이후 Array에 변경을 가할 때마다 NodeList를 함께 고려해야 하는 의존성이라는 본질을 발견한다. 이는 오픈소스 기여 경험이 있는 개발자라면 흔히 경험을 통해 얻는 좋은 예시인데 이처럼 이론을 실무로 설명할 수 있는 저자의 내공과 경험은 의심할 여지가 없다.

프로그래밍의 패러다임에는 여러 형태가 존재한다. 순차적으로 명령을 수행하는 원시적인 절차지향 프로그래밍에서 부터 객체와 클래스 중심의 객체지향 프로그래밍, 상태 없이 순수 함수 중심을 추구하는 함수형 프로그래밍, 선언적으로 규칙과 조건을 명시하는 논리형 프로그래밍, 그 외에도 데이터 지향 프로그래밍 등 다양한 패러다임이 존재한다.

반면 지난 20~30년간 국내 IT 시장은 너무 편식한 경향이 없지 않다. Java 중심의 OOP에 너무 집중했고 SI 기반이 찍어내기식 돈만 바라보는 업체들의 행태 덕분에 편식은 점차 심해졌고, 건전한 개발자 생태계 발전에 적잖은 걸림돌로 작용했다.

또한 요즘엔 또 다른 의미의 편식이 존재한다. 프레임워크에 너무 의존하다보니, 대체로 후배들은 설계적 관점 즉, 멀티패렅다임 프로그래밍 수준의 숲을 보는 능력이 매우 떨어진다.

앞으로 AI의 물결이 모든 것을 바꾸는 시대가 다가오는데 프롬프팅 하나만 봐도 알 수 있듯 이제 질문을 정말 잘해야하는 시대가 다가왔다. 사실 질문을 잘할 수 있으려면 본질을 파악하는 능력이 중요하다.

본질을 파악하고 가진 요소들을 얼마나 잘 오케스트레이션하여 AI로 하여금 원하는 것을 얼마나 빠르게 얻을 수 있는지에 대한 능력이 중요한 시대가 된 것이다.

GoF 디자인 패턴 등장배경에서 볼 수 있듯 본 도서는 앞으로 AI와 그 사용자들이 만들어 나갈 변화에 필요한 숨은 진의를 파악할 수 있는 AI 시대에 필요한 교본과도 같은 책이라 할 수 있다.

AI가 발전하며 데이터가 더욱 중요해졌고 이는 프로그래밍의 발전 방향에 데이터가 상당한 종속성을 행사하는 계기가 되었다. 개인적으로 이터러블이 프로그래밍 언어론에 지대한 영향력을 행사하는 것은 데이터와 자료구조에 기인한다고 본다.

List, Array와 같은 자료구조를 활용하는 한 for문 형식은 피할 수 없게 되었는데 수치형 집합을 GPU가 병렬 연산하는 트렌드까지 만나면서 한 층 더 나아가 선형대수의 번창에 이르는 변화를 주도했다.

유사 군 데이터를 처리하는데 있어 프로그래밍은 next() 구조를 도입할 수 밖에 없었고 연역적으로 프로그래밍만 독립적으로 놓고 보던 초기 모델은 점차 데이터에 종속된 귀납방식으로 변모했다. 이 또한 어디까지나 문제 해결을 위한 당연 수순이다.

비동기 또한 패러다임을 바꾼 지대한 요소이다. 웹과 모바일의 등장으로 기다림 없이 다른 일을 할 수 있도록 극도의 효율성을 추구하는 과정이 필요한 시대가 되었다. 가장 큰 요인은 I/O 문제에서 발생하는 데 프런트엔드 진영이라면 앞서 언급한 UX 부분 백엔드라면 리소스를 제어하는 부분이 이에 해당한다.

대신 개발자로 하여금 실행 순서를 제어하는 능력을 요하는 부작용(?)이 생겼다. 실무적으로는 가독성이나 안정성 측면에 빨간불을 켠 셈이다. 모든 것은 트레이드 오프가 발생하니 어쩔 수 없는 문제이다.

이 책에서 잘 정리하고 있듯 자바스크립트 진영만 봐도 ES6에서의 Promise 도입, 2017년 async-await 채택의 현상은 이런 시대상을 반영한다.

객체 진영의 반복자 패턴에 함수형 진영의 일급함수가 결합하기 시작한 것이다. class 문법을 도입하며 동시에 순회규약 도입했다. 덕분에 지연평가나 리스트프로세싱이 가능해졌다.

메타 프로그래밍에서 한발 더 나아가 멀티패러다임이 대세가 되면서 함수는 다른 호출측 함수의 인자처럼 활용되며(일급함수-고계함수), 코드를 데이터와 로직이 담긴 List로 보는 관점으로 리스트 프로세싱이 탄생했다.

이 부분에 대한 구체적인 예시는 115p를 참조하면 된다. LISP에 착안하여 map(f, iterator)형식의 Pipe Operator를 만들어 보는 과정의 전반을 이해할 수 있다면 그리 어렵지 않은 이야기인데 이는 저자의 통찰과 전달력 덕분임을 강조하고 싶다.

Pipe Operator115

이 책에 소개되진 않았지만 내가 자주 활용하는 Python 진영의 인기쟁이 Pandas 라이브러리에 apply(), map(), applymap(), agg(), transform(), filter(), pipe() 함수 등이 흔히 활용되는 것도 이런 멀티패러다임의 영향이다.

책의 전반부(1~4장)은 멀티패러다임이 등장하게 된 Why 즉, 본질에 집중한다.

수학적 원리, 불변성과 순수성, 예측가능성, 병렬처리, 비동기처리, 데이터처리, 쪼개어 연결하는 과정, typeof 키워드로 안전함을 보장하는 타입 추론, promise, 반복자 이터레이터의 변화, 제너레이터에서 yield와 iterator 반환의 결합, for…of 문법과 Symbol.iterator 시그니처의 활용, 커링, 변수같은 일급함수, 일급함수를 호출하는 고차함수(일급함수의 호출측), 필요한 시점에 필요한 만큼만 꺼내쓰는 지연평가, 고차원의 다형성을 제공하는 제네릭, 객체 모델링, 유연성과 확장성, 책임소재, 협업지향, 추상화, 캡슐화, 전개연산자(…), 구조 분해, 상속과 인터페이스의 활용 방법, 비동기 처리 등 정신없는 풍랑을 거치다보면 어느덧 함수형이 무엇인지, 객체지향이 무엇인지 별 의미가 없는 정반합의 완숙한 경지에 이른다.

후반부는 전반부에서 키운 내공을 바탕으로 현실의 세계를 평정한다. 패턴과 예제 중심으로 문제 해결의 본질을 어떻게 활용할지에 대한 저자의 사고방식을 쫓아가다보면 자연스럽게 내공을 운용할 수 있게 된다.

동시성핸들링

명쾌하게 탄탄하게 쌓인 개념을 바탕으로 자연스럽게 손과 머리로 체화되는 과정이란..이렇게 이론과 실무의 경계를 지우는 저자의 내공과 전달력에 경의를 표하고 싶다.

책이란게 원래 사놓고 안보는 독자가 대다수겠지만 초급자에게는 1장만 해석되어도 프로그래밍의 세계가 달리 보일 것이다. 중급자는 5장만 따라해 봐도 본인의 실무 내공에 큰 변화가 있을것 같다.

아마도 보이지 않던것이 보이기 시작할텐데 시간, 속도, 시간복잡도, 프로세스, 메모리와 같은 H/W 리소스에 이르는 보이지 않는 것들이 보이고 신경쓰이기 시작할 것이다.

적어도 IT 서적 중 이렇게 전달력이 높은 저자를 본적이 없다. 다년 간의 내공과 강의 경험 없이는 이게 가능할까 싶다. 우리나라에도 이런 책이 존재한다는 것이 자랑스러울 정도이다. 왠만한 유관분야 원서보다도 이 책으로 시작하는 것을 추천하고 싶다.

 

한빛미디어 서평단<나는 리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.

 

 

학교나 시험에서는 문제의 답이 명확하게 나오도록 절차적, 객체지향, 함수형 언어처럼 프로그래밍 언어들을 각각 구분해 배우는 경우가 많습니다. 각각의 언어는 고유한 특징과 철학이 존재합니다. 이를 명확히 이해하는 것은 프로그래밍의 기본기를 다지는 데 도움이 됩니다. 하지만 실제 개발 현장에서는 이러한 경계가 점점 모호해지고 있습니다. ​ 다양한 패러다임의 장점을 융합한 멀티패러다임 언어들이 널리 사용되며, 하나의 언어로도 여러 방식의 사고와 문제 해결이 가능해졌기 때문입니다. 자바, C#, 스칼라, 타입스크립트와 같은 언어들은 객체지향뿐만 아니라 함수형 프로그래밍도 자연스럽게 지원합니다. 개발자들은 상황에 따라 유연하게 패러다임을 선택하고 조합할 수 있어야 합니다. ​ 어떤 문제는 함수형 접근이 적합할 수 있으며 어떤 문제는 객체지향적인 구조가 더 효과적일 수 있기 때문에 특정 방식에만 익숙해지는 것은 오히려 가능성을 제한할 수도 있기 때문이죠. 이를 도와 줄 책이 나왔습니다. 마플코퍼레이션 유인동 CTO가 쓴 멀티패러다임 프로그래밍 책인데요. 자세히 알아보도록하겠습니다. ​

 

 

1) 멀티패러다임이 바꾼 언어 설계와 사고방식

멀티 패러다임 프로그래밍 책은 반복자와 제너레이터, 입출력 함수의 변화 과정을 통해 멀티패러다임 프로그래밍이 언어 발전에 어떤 영향을 주고 있는지를 통찰력 있게 조명합니다. 특히 자바스크립트의 반복자(Iterator) 도입을 사례로 들며, 객체지향과 함수형 프로그래밍의 경계를 넘나드는 반복자 패턴의 확장은 단순한 문법적 변화가 아니라 언어적 사고방식의 전환임을 강조합니다. 객체지향 디자인 패턴 중 하나인 반복자 패턴이 함수형 패러다임과 만나면서 더 높은 표현력과 조합성을 얻게 되었다. 이 책에서는 전통적인 객체지향 패턴이 현대 언어에서 어떻게 함수형 개념과 통합되는지를 설명해주는데요. 단지 기술적 도입을 넘어 언어 설계 철학까지 아우르는 시야를 제시합니다. 특히 반복자 패턴이 GoF 디자인 패턴의 일부로서 정립되었지만, 실제 언어에서 내장된 기능으로 재해석되고 있다는 설명을 인상 깊게 봤습니다.

 

 

2) 에러 핸들링

비동기 프로그래밍에서 에러를 효과적으로 처리하는 것은 필수입니다. 비동기 에러 처리를 하지 않으면, 오류가 발생해도 조용히 무시되거나 예기치 않은 동작으로 이어질 수 있습니다. 이는 디버깅을 어렵게 하고 사용자에게 잘못된 결과를 보여주거나 앱이 예기치 않게 중단되는 등 심각한 문제를 일으킬 수 있습니다. ​ 멀티패러다임 프로그래밍 책은 에러를 감추는 것이 문제 원인 파악을 어렵게 하며 예측 불가능한 동작을 유발한다고 강조합니다. 대신 에러를 명확히 발생시키고 호출자에게 책임을 위임해 조기 탐지 및 대응이 가능하도록 설계해야 합니다. ​ 또한 에러 핸들링의 한계를 극복하기 위해 Sentry.io 같은 모니터링 도구를 활용해 실시간으로 에러를 감지·추적하는 방안도 제시합니다. 이는 단순한 코드 작성법을 넘어 실무에서 운영 방법도 알려줍니다.

“한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.”

들어가며

객체지향, 함수형, 명령형… 개발하면서 많이 들어본 용어들이고 실제로 코드를 작성할 때 자연스럽게 접하게 되는 방식들이에요. 책 표지에 '객체지향, 함수형, 명령형의 통합적 사고로 구현하는 소프트웨어 설계와 구현'이라는 문구를 보니 '저 세 가지를 어떻게 통합적으로 사용한다는 거지?'라는 궁금증이 들더라고요.

보통은 각각을 따로 배우거나, 어떤 하나를 선택해서 써야 한다고 생각했는데 말이에요.

이 책은 '어떤 게 정답이다'라고 단정하기보다는 상황에 따라 어떻게 조합해서 쓸 때 성능적으로도, 가독성 면에서도 더 좋은 코드를 만들 수 있는지를 알려주는 책인 것 같아서 읽어보게 되었습니다.

특히 프론트엔드 개발을 하면서 언제는 함수형으로, 언제는 객체를 만들어서 코딩하게 되는데 그 기준이 모호했거든요.

이 책을 통해 그런 혼란을 정리할 수 있을 것 같아요.

목차

주요 내용

[멀티패러다임 프로그래밍]은 현대 개발에서 요구되는 유연한 사고를 다룬 실무 중심의 개발서입니다.

저자는 객체지향, 함수형, 명령형 프로그래밍이 더 이상 서로 경쟁하는 관계가 아니라고 말해요.

오히려 각 패러다임의 강점을 상황에 맞게 조합할 때 더 견고하고 유연한 소프트웨어를 만들 수 있다는 관점을 펼칩니다.

목차를 살펴보니 타입스크립트를 기반으로 하되 LISP, 하스켈, 자바 등 다양한 언어의 철학을 자연스럽게 연결해 설명하는 구성이에요.

반복자와 제너레이터, 리스트 프로세싱, 고차 함수 같은 현대 언어의 고급 기능들을 실제 프로젝트에 어떻게 적용할 수 있는지 구체적으로 다룰 예정이라서 기대가 됩니다.

단순히 '어떻게' 구현하는지를 넘어서 '왜' 그렇게 구현해야 하는지까지 설명하여 개발자의 사고력 자체를 키우는 데 중점을 두고 있어요.

1장을 읽어보니 멀티패러다임 프로그래밍이 단순한 이론이 아니라 실제 개발 현장에서 이미 널리 활용되고 있다는 점이 인상적이었어요.

특히 2010년 이후 대부분의 주요 언어들이 멀티패러다임을 지원하게 되었다는 배경 설명이 흥미로웠습니다. 저자가 제시하는 멀티패러다임의 핵심 장점도 명확하게 와닿았어요.

각 패러다임을 상황에 맞게 선택하거나 결합할 수 있다는 유연성, 그리고 특정 패러다임에 얽매이지 않고 문제 해결에 가장 적합한 방식을 고를 수 있다는 점이 실용적으로 느껴졌습니다.

1장에서 소개한 여러 개념들 중에서도 지연 평가와 고차 함수 부분이 특히 기억에 남는데요.

함수형 프로그래밍의 핵심인 일급 함수 개념을 통해 함수를 값처럼 다룰 수 있다는 설명을 읽어보았고, 이를 통해 코드의 예측 가능성을 높일 수 있다는 점이 와닿았습니다.

제너레이터 함수와 이터레이션 프로토콜에 대한 설명도 인상적이었어요. 단순히 문법적인 설명을 넘어서 메모리 효율성과 지연 평가의 장점을 실제 코드 예시와 함께 보여주니 이해가 훨씬 쉬웠습니다.

특히 타입스크립트와 이터레이션 프로토콜을 활용한 사용자 정의 이터러블 구현 방법은 바로 실무에 적용해볼 수 있을 것 같아요. 상속 대신 인터페이스를 활용한 객체지향 접근법도 흥미로웠습니다.

기존의 고전적인 객체지향 방식에서 벗어나 더 유연하고 확장 가능한 설계 방향을 제시하는 부분에서 저자의 실무 경험이 느껴졌어요.

아직 1장까지만 읽었지만, 앞으로 나올 실전 함수형 프로그래밍과 비동기 프로그래밍 부분이 벌써 궁금해집니다. 특히 여러 패러다임을 상황에 맞게 조합하는 방법에 대한 구체적인 사례들을 빨리 보고 싶어요.

특징

이 책의 가장 큰 특징은 이론과 실무 사이의 간극을 메워준다는 점입니다.

1장만 봐도 추상적인 개념 설명에 그치지 않고 실제 개발에서 활용할 수 있는 구체적인 방향을 제시해요.

목차를 보니 프런트엔드 개발자에게는 자바스크립트의 본질과 새로운 설계 감각을, 백엔드 개발자에게는 비동기 프로그래밍과 효율적인 데이터 처리 방법을 각각 다뤄줄 것 같습니다.

추천 이유와 대상

책 초반에 소개되어있는 대상 독자를 그대로 보여드리는게 좋을 것 같습니다.

==========

이 책은 타입스크립트와 자바스크립트를 사용하는 프런트엔드 개발자에게 유용하며 Node.js, Express.js, NestJS 등을 다루는 백엔드 개발자에게도 도움이 됩니다.

또한 멀티패러다임 프로그래밍은 특정 언어에 국한되지 않으므로 자바, C#, 코틀린, 스위프트 등 다른 언어를 사용해도 이 책을 통해 언어 활용 능력과 문제 해결 능력을 한층 확장할 수 있습니다.

특히 중급 이상 개발자로 성장하고자 하는 분에게 적합합니다.

기본기를 다시 다지면서 각 언어의 고급 기능을 깊이 이해하고 실무에 적용하도록 돕기 때문입니다.

최신 언어 기능과 폭넓은 패러다임을 활용하고 더 효율적이고 견고하게 코드를 작성할 수 있습니다.

==========

맺음말

[멀티패러다임 프로그래밍]은 현대 개발 환경에서 점점 중요해지는 유연한 사고방식을 체계적으로 정리한 책이에요.

저자가 말하는 '좋은 코드엔 프로그래밍 패러다임의 경계가 없다'는 메시지는 많은 개발자들에게 새로운 관점을 제시할 것 같습니다.

특정 패러다임에 얽매이지 않고 상황에 맞는 최적의 도구를 선택하는 판단력을 기르려면 이 책이 든든한 길잡이가 되어줄 수 있겠다는 생각이 들어요.

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.


멀티패러다임 프로그래밍 / 유인동 지음 / 한빛미디어

 

? 함수형 프로그래밍에 대한 인식을 바꾼 책

평소에 함수형 프로그래밍을 적극적으로 사용하는 편은 아니다. 보통 Java Collection 클래스에 대한 후처리가 필요할 때 사용하는데, 예를 들어, 응답으로 객체 배열이 들어왔을 때, 유효한 객체만 응답으로 받기 위해 filter를 사용하거나, 일괄적인 변경이 필요할 때 map을 사용하는 수준이다. 이번에 책을 읽고 난 뒤에는 생각이 바뀌었다.

 

우선은 비동기 처리의 필요성이다. 많은 시간이 소요되는 어떤 작업이 있다. 이 작업은 CPU 집약적이지 않고, 네트워크 통신 또는 파일 처리 등의 이유로 지연이 생기기 때문에 느리다. 이런 작업들은 동기적으로 진행하면 비효율적이다. 마치 음식점에서 여러 음식을 주문할 때, 한 음식이 조리되어 식탁에 올려졌을 때 비로소 다음 음식을 주문하는 것과 동일하다. 처음에 한 번에 주문하고 나오는대로 맛있게 먹으면 될텐데 말이다. 

 

그 다음은 일급 함수의 역할이다. 일급 함수는 함수를 인자로 전달받을 수 있기 때문에, 매우 유연한 처리가 가능하다. 예를 들어, 음식점에서는 주문 받은 메뉴에 따라 조리법과 플레이팅 방식이 다르다. 하지만 요리를 조리하고, 접시에 올려서, 서빙한다는 순서는 동일하다. 일급 함수는 메뉴에 따라 다른 동작을 수행하는 함수를 전달받고, 일정한 순서에 따라 서빙까지의 절차를 일관되게 표현할 수 있다.

 

그 다음은 순수 함수다. 순수 함수는 비동기 처리에 유용하게 활용할 수 있다. 순수 함수는 부수 효과(side-effect)를 발생시키지 않고, 동일한 입력에 항상 동일한 결과를 반환한다. 이러한 특징으로 인해 thread-safe한 상태를 유지하고, 예측 가능성 뿐만 아니라 성능 최적화를 위해 활용된다. 마치 학교 게시판에 공모전 정보가 게시되었을 때, 내가 필요하다고 포스터를 가져가는게 아니라 카메라로 QR만 찍어서 지원 사이트에 방문하는 것과 같다.

 

마지막으로 함수형 프로그래밍은 이러한 요소들을 잘 버무린 비빔밥이라고 비유하고 싶다. 그 안에는 나열된 일련의 자료들을 효율적으로 처리하기 위한 고민들이 담겨져 있다. Iterator 패턴을 활용한 범용성, 지연 평가를 통한 메모리 효율성, 일급 함수를 활용한 확장성, 순수 함수를 활용한 병렬 처리 안정성까지. 그러니 저자가 IP, OOP, FP의 관계를 강조하는 것도 이해가 간다.

 

 

? 심도 있는 고찰과 이론과 실무를 넘나드는 꿀팁

몇 가지 내용만 간단히 소개하자면, 먼저 비동기 에러 핸들링에 대한 팁이 도움이 됐다. 순수 함수는 부수 효과를 가지지 않는 것이 핵심이므로 발생한 에러는 상위 호출자에게 위임하는 것이 좋고, 에러 핸들링 코드는 네트워크 요청, 파일 입출력, 데이터베이스 쿼리와 같이 부수 효과 발생 코드 근처에 작성하는 것이 좋다. 리스트 프로세싱 패턴화도 도움이 되었다. 변형-누적 패턴(map-reduce), 중첩-변형 패턴(nested-map) 등 자연스럽게 사용하지만 이렇게 정리해보니 필요할 때 어떤 패턴을 사용해야할지 정리할 수 있어서 좋은 것 같다. 그리고 리스트 프로세싱 함수 유형별 개념 정리도 패턴화와 연계해서 매우 유용하게 사용 가능하다. 지연 중간 연산에는 map, filter, zip, 터미널 연산에는 find, every, some, reduce 등 특정한 패턴을 사용하고자 할 때, 함수의 목록을 바로 참고할 수 있다. 이 부분은 저자의 GitHub 소스의 예제를 참고하면 더 많은 것을 배울 수 있다.

 

 

⚠️ 프론트엔드 예시와 FxTs 라이브러리 사용

물론 백엔드 개발자도 참고할만한 내용이 있지만, 기본적으로 타입스크립트를 사용하는 프론트엔드 개발자가 얻어가는 것이 가장 많은 책이다. 그리고 일부 예시로 FxTs 라이브러리를 활용하는 경우가 나온다. 따라서, Native JavaScript만으로 모든 것을 설명하지는 않는 점을 알아두면 좋다. 

 

 

마치며

솔직히 후반부는 내용이 잘 읽히지 않았다. 변명하자면 코드가 여러 곳에 산재되어 있어서, 나처럼 프론트엔드 경험이 부족하다면 진득하게 정독해야만 제대로 이해할 수 있을 것 같다. 그리고 책이 확실히 깊이가 있다. 읽으면 읽을수록 놓쳤던 내용들이 보여서 신기했다. 언젠가는 이 책에 있는 내용들을 모두 이해할 수 있는 날이 왔으면 좋겠다 ? 

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.​

 

들어가기에 앞서 멀티패러다임이란 무엇일까?

쉽게 말해 언어에 따른 객체지향, 함수형, 명령형의 구분이 아닌 상황에 맞춰 사용하는 프로그래밍이다.

언어에 따라 멀티패러다임을 지원하지 않기도 하지만 내가 주로 사용하는 C#의 경우는 가능하다.

 

내용

처음으로 책을 다 읽지를 못 하고 리뷰를 한다 ㅠ

총 7챕터까지 있고 500페이지가 넘는 분량인데 생각보다 내용이 어렵다!

현재 3장을 읽는 중인데 좀 길게 잡고 천천히 읽어봐야겠다.

프로그래밍 책답게 설명을 할 때 코드가 디폴트로 적혀 있어 이해하기는 편했다.

이래서 페이지가 늘어난 거 같다 ㅋㅋ

문제는 제대로 이해를 못 하면 페이지를 넘길 수 없다는 거..?

쳅터 마지막엔 요약정리가 있는데 사실 이게 각 챕터에서 설명하고자 하는 핵심 내용이다.

리뷰를 쓰기 전 나머지 챕터의 요약정리만 읽어봤는데 챕터 내용을 모르면 이해가 안 간다 ㅋㅋ

그래도 공부한 걸 마지막에 이렇게 정리해 줘서 좋았음!

예제

다행스럽게도 모든 예제들을 손코딩 할 필요는 없다.

저자이자 개발자분이 모든 과정을 깃허브에 올려놨기에 귀찮음을 덜 수 있다.

 

생각보다 책에 없는 내용들도 많으니 제대로 보실 분은 꼭 참고하시길!

실습을 위한 예제 활용법과 3장까지는 맛보기로 볼 수도 있으니 책 사기 전 미리 봐도 좋을 거 같다.

이 정도 퀄리티까진 아니어도 나도 깃허브에 프로젝트 하나 만들어서 공유해 보고 싶다 ㅎㅎ

실습

아직 챕터 3 진행 중이지만 모든 예제를 다 돌려보지는 않았고 대충 이해되는 부분은 눈대중으로 넘어갔다.

읽다 보면 도저히 이해 안 가는 내용들이 있는데 이럴 때 직접 돌려보면 생각보다 금방 이해가 간다.

언어가 C#이었으면 더 좋았겠지만... 어쩔 수 없지 ㅋㅋ

 

추가 정보

깃허브 말고도 내가 자주 이용하는 인프런에서도 강사로 활동 중이셨다.

멀티패러다임 프로그맹 강의를 전문으로 하시는 듯!?

저자 유튜브도 있으니 개념이 궁금하신 분들은 한번 보시기를 바란다.

근데 마플개발대학이 뭐지?

 

마치며

일단 이 책은 초급자 용이 아니다.

기본적으로 프로그래밍을 알고 있고 코딩을 좀 해본 사람이 봐야 이해가 될 거 같다.

가볍게 개념 정리하려고 봤다가 제대로 공부하는 중 ㅋㅋㅋㅋ

그래도 프로그래머 관점에서는 한 단계 레벨업 할 수 있으니 추천!

이제 1/3 정도 봤는데 후반부 내용이 더 어려워 올해 말까지 천천히 보면서 개념 정리하고 다시 후기를 남겨야겠다.

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬받아 작성된 서평입니다."


 멀티패러다임? 갑작스럽게 책 제목으로 접한 용어다. 처음에는 뭘 말하는지 몰라 책을 읽기 시작했을 때에는 그냥 자바스크립트, 타입스크립트 언어 활용서라고 착각이 될 정도였다. 그런데 저 언어를 중심으로 설명을 한 건 단순히 접하기 쉽고 설명에 적합하기 때문이라는 걸 읽어나가면서 이해하게 됐다.

 더욱이 이게 아주 진귀한 뭔가가 아니라 사실상 내가 지금까지 작업해왔던 걸 좀 더 명징하게 표현해주는 용어라는 생각이 들었다. 이게 무슨 뚱딴지 같은 소리일까? 주로 자바와 자바스크립트를 사용하고 있는 내게 멀티패러다임을 이미 하고 있다고? 생각해보면 처음 코딩을 배우고 시작할 때부터 멀티패러다임을 적용해오고 있었던 거였다. 다만 그 개념을 잘 적용하고 인지하고 썼다기보단 별 생각없이 이게 잘 작동하니까, 또는 메모리를 고려해서, 이게 보기 깔끔하니까라는 식으로 적용해왔던 거다.

 대학에서 C/C++를 배우고 자바를 배웠다. 자바스크립트는 거의 독학으로 익혀왔고, 이제 막 타입스크립트를 배워보려고 워밍업하는 상황이다. C를 쓰다가 C++를 썼다고 객체지향적으로 내가 코드를 작성했나? 사실은 C 같은 C++를 사용했다. 자바로 처음 넘어왔을 때 진정한 객체지향적인 개발을 했을까? 글쎄올시다다. 과거의 자바 스타일에서 현재 자바 스타일을 생각해보면 과거의 그 자바 스타일로 현재 코딩하고 있을까? 근래는 오히려 함수형으로 작성해보려고 가급적 Optional과 Stream을 활용하고 있다. 기본적으로 절차/명령/객체지향/함수형 그 뭐가 됐든 다 섞어서 코딩하는 중이다.

 다시 말해, 나도 모르는 사이에 언어가 제공하는 기술들을 쓰다보면 자연스럽게 멀티패러다임을 적용해 코딩을 하고 있다는 거. 중요한 건 인지하고 이를 의도적으로 의식하고 개발하는 건 아니라는 점이다. 상황에 맞게, 또는 내 변덕으로 이들을 섞어 쓰고 있다. 요즘은 목적에 맞는 걸 사용하려고 애쓰는 상황이긴 하지만.

 그렇다면 이 책이 나에게 주는 가치는 무엇일까? 솔직히 기본적으로 목적하는 바에 비해 코드량이 많으면 무조건 버그가 숨어 있다고 생각한다. 그렇기에 가급적 명확하고 적은 양의 코드를 작성해보려고 쓰는 편인데, 이럴 때 기준으로 삼아야 할 게 생겼다. 그런데 그게 그 때 그 때 달라서 애를 먹는다. 그런데 이 책에서는 각 패러다임을 실무적으로 어떻게 적용할 수 있는 알려준다. 아마 체득하면 꽤 유용할 거라 생각한다.

 아마도 1장이 가장 난해할 것이다. 가장 생각이 많아지고 책을 덮고 싶을지도 모를 정도로 혼란스러우면서도, 제일 시간을 많이 들여야 하는 구간이다. 아마 코딩하면서 깊게 생각 안 하고 막 쓰고 있었을지도 모르겠다. 그래서 다 아는(?) 내용을 왜 이렇게 구구절절 말하는 거지? 라는 생각이 들지도 모른다. 내 생각엔 그 반응은 정상이다. 그렇기에 그 이면에 숨은, 평소에는 궁금하지 않았던 이 내용을 이해하는 건 앞으로 책을 읽어나가거나, 읽고 난 후 코딩을 할 때 아마 무의식적으로 이걸 생각하면서 코드를 작성하게 될 게 뻔하다. 그만큼 파괴력 있는 기초 중의 기초다.

 이게 슬 눈에 익으면 2장에서 현대 개발 언어에서 많이 보는 내용들이 등장한다. 특히 타입 추론, 제네릭 같은 건 빼고 싶어도 뺄 수 없는 핵심이다. 참고로 LISP를 대학 수업 때 배웠고, 과제도 간단하게나마 해봤던 기억이 있다. 가장 인상 깊은 설명은 시스템을 재컴파일과 중단 없이 도중에 정지하고 새로운 코드를 갈아 끼운 다음 정지한 지점부터 재개할 수 있다는 내용이었다. 자동차 렌더링 솔루션인데, 차를 모델링하고 주행시켜보다가 타이어 모델이 맘에 들지 않아 잠깐 중지하고 타이어 모델을 다른 것으로 갈아 끼운 다음, 중단된 순간부터 재개하면 전체 시스템을 중지하지 않고도 바뀐 타이어가 장착된 차가 움직이는 모습을 볼 수 있다고 교수님이 설명하셨다. 그게 얼마나 강렬하게 인상에 남았던지 30년이 지났어도 기억이 난다.

 1, 2장에서 설명해온 내용을 기반으로 3장에서 심화 학습하는 느낌이다. 정말로 별 생각없이 사용하던 함수들을 여기서 그 내용을 속속들이 설명하면서 지연 평가 등을 적용한 내용을 알려준다. 아무래도 이해도가 올라갈 수밖에 없다. 끈질기게 설명을 해주니까 더 그렇다.

 4장, 비동기를 다루는데, 웹 프론트엔드 개발을 할 때 이해하지 않으면 제대로 할 수 없는 그런 내용을 다룬다. 이 배경지식이 없다면 SPA 같은 걸 이해하는 데 어려움이 있을 것 같다. (사실 그런 개념이 약했어도 얼추 수백 번의 에러를 겪다보면 막연하게나마 이해했을지도 모르겠다)

 5, 6, 7장은 실무라고 생각하면 좋다. 실제 업무에 활용할만한 내용들이 많으므로 이건 한 번 읽고 넘길 게 아니라, 진짜 업무를 본다 생각하고 틈날 때마다 하나씩 꼼꼼히 이해해보는 게 좋을 거다. 실력 발전을 위해서라면 말이다. 그렇다고 이게 전부는 아니니, 가이드라인이나 연습문제 정도로 생각해보면 어떨까 싶다.

 다시 거듭 말하지만, 별나라 얘기를 하는 게 아니다. 본인이 인지하고 있든 인지하지 않았든, 우리가 늘상 해왔던 내용들이다. 이 책은 그걸 좀 더 체계적이고 인식할 수 있게 잘 가다듬어 설명하고 있다. 비록 큰 관심이 없었던 몇 가지 언어가 중간에 튀어나와 당황스럽긴 했지만, 그마저도 잘 설명을 해주고 있어서 덜 부담스럽다. 오히려 흥미를 느꼈다면 추가로 해당 언어를 익히는 계기가 될지도 모르겠다.

 멀티패러다임, 거창하게 느껴지나 거창하지 않다. 우리는 이미 해오고 있던 것이니까.

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.

 

고백부터 하자면, 모든 패러다임을 온전히 이해하고 있지는 않다. 하지만 이 책에서 각각의 장점을 살려 통합적 사고로 구현하려는 설계 철학은 인상적이었다. 특정 패러다임에 얽매이지 않고 상황에 맞는 최적의 접근법을 선택하는 유연함이 현대 개발자에게 필요한 사고방식이지 않을까 하는 생각으로 읽어나가기 시작했다.

 

실무에서 map, filter, reduce와 같은 내장함수를 종종 사용하게 되는데, 정작 그런 내장함수가 어떻게 구현되었는지는 생각한 기억이 별로 없다. ‘프론트엔드 기술 면접 준비’라는 제목의 포스팅으로 종종 마주했던 이야기를 정작 실무에서 작업하다 보면 크게 관심을 두지 못했던 것이다. 이 책은 바로 그 지점에서 출발한다. 객체지향 기반 언어들이 반복자 패턴을 통해 이터레이션 프로토콜을 구현해 왔고, 함수를 인자로 전달하는 등 일급 함수의 특성이 추가되면서 이터레이터 헬퍼 함수들이 구현될 수 있었다고 언급한다. 제네레이터를 통해 map이나 for…of 등을 만드는 과정이나 이터러블을 받아 순회하면서 특정 값을 반환하는 과정을 직접 구현하고 있는데, 차분하게 따라갈 수 있기에 호기심을 자극하는 과정이었다.

 

2장은 LISP 계열 언어인 클로저를 예시로 LISP를 설명한다. LISP을 처음 접했지만, 다양한 계열의 언어가 익숙하지 않더라도 앞서 기본 개념을 먼저 설명해 주고 있기 때문에 프로그래밍의 전반적인 개념만 알고 있어도 큰 무리 없이 읽어 나갈 수 있었다. 마음먹고 찾을 일이 없으면 다른 언어의 선언 방식을 볼 일이 많이 없었는데, 다양한 언어를 접해볼 기회였다.

 

책에서 TypeScript를 주요 언어로 사용하는 만큼 JavaScript에 대한 심화적인 학습이 되기도 한다. 하나를 꼽자면, 최근에는 Promise를 직접 작성할 일이 많진 않지만, Promise에 대한 본질적인 이해를 돕기 위해 별도의 단락으로 설명을 이어가는 부분이 있다. 예컨대 Promise.race는 병렬로 실행된 여러 Promise 중 가장 먼저 완료된 Promise의 결과나 에러를 반환하는데, 이를 활용해 응답 속도에 따라 다른 UI 요소를 렌더링하는 것이 가능하다. 단순히 Promise.race가 무엇인지에서 끝나는 것이 아니라 실제 서비스에 적용할 수 있는 예시가 있다 보니 직접 구현해 보고 싶은 호기심이 든다. 또한 함수형 코드를 명령형으로 변경하면서 단점에 대해 언급하는 부분은 두 개의 코드를 바로 대조할 수 있기에 이해하기 좋았다.

 

리스트 프로세싱 패턴화 섹션은 실무적으로 사고할 수 있는 예제들이 많다. LLM이나 에이전트를 통해 해당 패턴을 뽑아낼 수 있다고 해도 그 패턴이 현 상황에 적합한지 판단하는 사고력은 여전히 필요하다. 그런 사고를 위해 패턴 하나하나 눈에 담아두는 것은 중요한 일이었다.

 

React를 사용한 사람이라면 dangerouslySetInnerHTML prop을 접해본 적이 있을 텐데, 애초에 prop의 이름을 보고 추측할 수 있듯이 권장하지 않는 방식이다. HTML 문자열을 DOM에 바로 삽입하는 props으로 XSS 공격이 노출될 가능성이 있다. TSX(JSX)를 통해 삽입되는 "(큰따옴표) 같은 문자열의 경우 별도로 이스케이프 처리를 하고 있지만, dangerouslySetInnerHTML는 별도의 이스케이프 없이 삽입되기 때문이다. 물론 prop로 삽입하기 전에 별도의 sanitize-html과 같은 라이브러리로 이스케이프 처리는 가능하지만, 순전히 언어만의 접근으로 그 이스케이프 처리의 과정을 엿볼 수 있다는 점이 흥미로운 부분이었다.

 

7장에서는 익숙한 TODO 기능을 추상 클래스와 상속, 제네릭 클래스로 추상화하는 과정 등을 담고 있다. 단순히 라이브러리로 구현해 왔던 기능을 새로운 패러다임으로 접근하는 건 신선했다. 최근엔 React와 더불어 Headless UI 라이브러리까지 사용하고 있어서 특히나 이런 세심한 접근으로 컴포넌트를 구현할 일이 거의 없었는데, 다시 사고하는 법을 배운 느낌이었다.

 

호기심을 자극하는 즐거운 경험에도 불구하고 내가 한번에 소화하기엔 어려운 섹션들이 꽤 있었다. 도리어 그런 부분이 마음에 들었던 건 내가 성장할수록 재차 이 책을 통해 담금질할 수 있다는 기대 때문이었다. 유독 생명력이 짧은 책들이 있다. 그 이유엔 여러 가지가 있겠지만 사회과학 분야에 시의성에 민감한 책들이 있듯이, 기술 분야에 있어서는 유독 기술 트렌드에 맞닿아 있는 책들이 있기 때문이다. 특히나 기술 트렌드가 자주 바뀌는 요즘 트렌드와 밀접한 책은 잘 팔릴지는 몰라도 그 생명력이 길다고 볼 순 없다. 비단 트렌드에 밀접하지 않더라도 React처럼 변화의 한복판에 놓여 있는 기술을 다루는 책이라면 1~2년 사이에 빛을 잃기도 한다. 그런 면에서 이 책은 트렌드에 밀접한 것이 아닌 언어 근본의 이야기와 소프트웨어 설계 철학에 대해 다루고 있기 때문에 언제든지 반복해서 읽을 수 있다는 생각이 들었다. 매 장이 끝날 때 요약정리가 되어 있어서 리뷰하는 느낌으로 훑어볼 수도 있고, 다시 읽기 전에 한번 훑어보는 것도 가능하기에 다회 독을 위한 좋은 장치가 마련되어 있다. 공교롭게 이 책을 읽을 무렵 사내에서 나와는 다른 스타일의 코드를 받아 분석해야 할 일이 생겼는데, 지지부진하게 느꼈던 그 일을 즐거운 호기심으로 확장할 수 있었던 건 이 책에 가진 가치관에 공감할 수 있었기 때문이라는 생각이 든다.

 

꼭 개발이 아니더라도 문화 콘텐츠나 비즈니스 분야에서 ‘Back to basic’이라는 표현을 종종 쓰곤 한다. 기본, 근본으로 돌아가서 돌이켜 보자는 의미로 해석할 수 있는 그 말은 기술에서도 적용 가능한 말이라고 생각한다. 이 책을 읽는다는 건, 눈앞에 보이는 영역이 React와 같은 라이브러리라 할지라도 결국 근원으로 들어가면 JavaScript임을 다시 상기할 수 있는 경험이었다. 우스갯소리지만, 어느 날 갑자기 LLM이나 에이전트, React, Vue 같은 라이브러리나 프레임워크가 사라진다고 하더라도 이 책 하나로 모던 웹 개발이 가능하지 않을까. 단순히 프레임워크나 라이브러리 차원의 사고가 아니라 언어 본연의 사고를 하는 책이다.

처음에는 번역서인줄 알았는데, 국내 저자분의 책입니다.

유인동 저자분은 다양한 경험을 하신 22년차 개발자 이십니다.

https://ciety.xyz/@mduniv/explore

MDU

Mold the Future, Master the Craft

ciety.xyz

마플개발대학이라는 곳에서도 활동하신다고 합니다.

주변의 책에 대한 평이 매우 좋아서 출간이 되고 평소에 관심이 있던 책이였습니다.

 

 

 

 

 

■ OO

· 다양한 언어의 특징중에 함수형, 객체지향, 절자척 언어의 구성으로 나누었지만, 현재는 다양한 언어에서 이러한 구분이 크게 의미가 없는 방향으로 진행이 되고 있습니다. 

· 대상 독자

중급 이상 개발자로 성장하고 싶은 개발자 분들에게 적합하다고 합니다. 언어는 타입스크립트를 주로 사용하는데, 세부 사항은 아래와 같습니다.

 

 

 

소스코드는 아래와 같고, 인프런에서도 저자분의 동영상 강의가 함께 지속적으로 업데이트 되고 있습니다. (유료)

https://github.com/marpple/multi-paradigm-programming?tab=readme-ov-file

GitHub - marpple/multi-paradigm-programming: Multi-Paradigm Programming: Combining Object-Oriented, Functional, and Imperative A

Multi-Paradigm Programming: Combining Object-Oriented, Functional, and Imperative Approaches for Software Development and Design - marpple/multi-paradigm-programming

github.com

 

 

■ OO

· 언어의 구문 차이만 있지 이제는 언어의 특성이 점차 사라지고, 각각의 장점이 반영되고 있어서 이 시점에 그러한 경계선에서 어떠한 부분을 주의하고 신경써야 하는지 알려주는 책이 나온것 같습니다.

우리가 일반적으로 알고 있는 GoF의 디자인 패턴중에 "반복자 패턴"이 함수평 패러타임의 일급함수가 만나서 함수형 패러다임의 지연평가와 리스트프로세싱을 구현해나가는 것, 반복자 패턴을 시작으로 여러 객체지향 언어들이 함수형 패러다임을 스스로 구현하는 것

 

· forEach, map, filter 함수에 대해서 반복자 패턴을 활용하고 이터레이션 프로토콜을 준수하는 함수형 구현을 코드적으로 다룹니다.

 

 

 

객체지향에서 상속과 인터페이스를 많이 사용하는데, 반복자 패턴과 이터레이터를 지원하는 헬퍼 함수들은 상속이 아닌 인터페이스를 사용합니다. 그러한 부분에 대해서 왜 그렇게 선택해서 사용하는지 이책에서는 그러한 부분에 대해서 고민하는 내용이 다른 책과 참 많이 다른 부분입니다. 

 

■ 함수형 프로그래밍과 LISP (List Processing)

· LIST 함수형 프로그래밍 언어의 한 종류로, 괄호 문법을 사용하여 모든 데이터를 리스트로 처리하는 특징을 가지고 있습니다. 이런 LIST의 사상이 책의 주제인 멀티패러다임 언어에도 많은 영향을 미치고 있습니다. 이러한 관점과 의견은 여러가지 언급되는 함수형/객체지향/절차향 등의 다양한 개념을 정확히 알고 파악하고 있어야 그 영향도를 파악할수 있다고 생각하는데 그런 점에서 이 책의 깊이를 알수 있습니다. 

 

타입 추론을 통해서 명시적인 타입 선언 없이도안전한 코드를 작성 할수 있고, 고차원 함수와 재네릭을 활용하면 복잡한 함수형 프로그래밍 패턴을 구현하기 용이합니다. 제네릭 함수는 인자의 타입에 따라 반환 타입을 유연하게 정할수 있고

일급함수의 도입과 이터레이션 프로토콜의 확산은 자바8(2014), 스위프트(2014), 자바스크립트,타입스크립트 (2015), 코틀린(2016)등 주요 언어에서 다채로운 기능을 제공합니다.

 

· 이터레이터 생성 방식의 다양화

 - IP(명령형 방식) : 제네레이터를 통한 이터레이터 생성

 - OOP(객체지향적 방식) : 이터레이터 객체 직접 구현

 - FP(함수형 방식) : 리스트 프로세싱 함수 조합으로 이터레이터 생성

코드, 객체, 함수는 각각 제너레이터, 이터레이터, LIST와 유사한 관계를 가집니다. 이터레이터는 반복자 패턴의 구현체로 컬렉션의 값을 일반화된 패턴으로 순회하는 객체입니다. 이를 통해 명령혀아 객체지향적, 함수형 접근 방식 모두를 통합하는 강력한 프로그래밍 모델을 만들수 있습니다.

 

· 비동기 프로그래밍 방식은 특정 작업이 완료되기 전에 다른 작업을 수행하는 프로그래밍 방식입니다.

요즘은 모바일로 많은 작업 수행이 있고, 사용자 화면의 편의성 측면에서도 이러한 방식이 많이 사용되어 집니다.

 - 값으로 다르는 비동기 : Promise는 비동기 작업의 결과를 값으로 다룰수 있는 객체 방식

 - 타입으로 다루는 비동기 : AsyncIterator, AsyncIterable, AsynGenerator 프로토콜

 

 

■ 다양한 실습 예제를 통한 학습

· 농구팀 데이터를 이용해서, 각 팀의 30점 이상 점수를 map, 2차원 배열등을 이용해서 처리해보기

· 커머스 데이터를 filter, map, reduce를 이용한 처리

· pipe, zip, range, takeWhile등 사용해보기

· 백앤드 비동기화 프로그래밍 : 커머스 결제 내역 동기화 , 누락된 결제 취소 및 환불 처리 등

· html 템플릿 엔진 만들기 : tagged templates

· 동시성 핸들링 함수 만들기

· 모바일 Setting 화면 만들기

· TODO 앱 만들기

를 통해서 어떻게 견고하고 유연한 코드를 작성하는지 다양한 접근 방식으로 프로그램적인 장점을 활용해서 접근하는 기법은 

조금 더 나은 코드 및 다양한 멀티패더라임 프로그래밍을 경험하고 싶으신 독자분들이라면 많은 도움이 되실것 같고

한단계 더 높은 관점의 뷰를 가지실 수 있다고 생각이 들었습니다.

 "한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."


이 책을 선택한 동기
개발 커뮤니티에서 '객체지향 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를 사용하게 되며 조금씩 그 점을 느꼈는데, 멀티패러다임 프로그래밍을 읽은 덕분에 더 뚜렷하게 그려졌습니다.

 

이제 아주 작은 부분부터 각 프로그래밍 방식의 장점을 활용하는 로직을 만들어보려 해요. 이 내용은 동료들에게도 공유하며 함께 시각을 넓히고자 합니다!

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.

 

"한빛미디어의 도서 지원을 받아 작성한 리뷰입니다.”

 

『멀티패러다임 프로그래밍』을 꼭 읽고 싶어 <나는리뷰어다>와 <『멀티패러다임 프로그래밍』서평단>에 신청했는데, 운 좋게도 두 곳 모두 선정되었습니다. 감사한 마음으로 책을 읽고 서평을 작성합니다.

 

왜 읽고 싶었나?

이 책에 관심을 갖게 된 이유는 출간 이후 많은 사람들이 읽고 있다는 사실을 알게 되면서입니다. 특히 제로초님의 추천 영상(보러가기)에서 이 책을 읽고 눈이 확 트일 정도로 인사이트를 얻었다는 말을 듣고 관심이 더욱 커졌습니다. 또한, 22년 경력의 소프트웨어 엔지니어인 유인동님이 어떻게 명령형, 함수형, 객체지향 프로그래밍을 활용하는지를 배우고 싶었습니다. 이러한 이유들로 이 책에 대한 궁금증이 커졌고, 꼭 읽어보고 싶었습니다.

 

어떤 점이 좋았는가?

솔직히 말씀드리면, 이 책은 제게 어려웠습니다. 집중하지 않으면 내용을 놓치기 일쑤여서 여러 번 되돌아가 읽기도 했습니다. 책에서 다루는 제너레이터, 이터레이터, 지연 평가 같은 개념들은 한번씩 들어봤지만, 실제로 언제 사용하는지 몰랐습니다. 그러나 이 책을 읽고 나서, 지연 평가는 무한 데이터를 다룰 때, 필요한 만큼의 데이터만 처리할 수 있는 로직을 작성할 수 있다는 것을 깨달았습니다.

객체지향, 함수형, 명령형 프로그래밍의 활용 상황을 이해하게 되었습니다. 구조를 잡을 때는 객체지향, 로직 구현에는 함수형, 흐름 제어를 위해서는 명령형 패러다임을 활용하라는 내용을 통해 각 패러다임을 적절히 혼합할 수 있다는 점이 인상 깊었습니다. 특히, JavaScript를 주로 사용하는 제게, 함수형 프로그래밍만 고집할 필요가 없다는 것을 알게 되었습니다.

책에는 예제가 풍부하게 포함되어 있어, 단계별로 차근차근 설명해 줌으로써 실제 현업에 어떻게 적용할 수 있을지 쉽게 이해할 수 있었습니다. 특히, 책의 마지막 챕터에는 프론트엔드 예제로 To Do 앱이 소개됩니다. 이 예제는 프레임워크 없이 UI 컴포넌트를 만드는 것부터 이벤트 로직을 처리하고, 추상화 과정을 단계별로 설명합니다. 이 예제를 보며, 예전에 내가 만들었던 To Do 앱이 얼마나 단순히 작동하도록만 만든 스파게티 코드였는지 깨달았습니다. 간단한 앱이라도 공통된 부분을 추상화하면 향후 요구사항 변화에 빠르게 대응할 수 있다는 점을 배웠습니다.

예제 코드가 타입스크립트로 작성되어 있어, 타입스크립트 기초만 알고 있던 저에게 많은 인사이트를 주었습니다. 타입스크립트를 이렇게 활용하는구나 하는 다양한 예시를 보고, 책을 반복해서 읽으며 공부한다면 타입스크립트를 잘 다룰 수 있겠다는 생각이 들었습니다.

결론적으로 이 책은 마치 훌륭한 사수를 만난 것 같은 느낌을 줍니다. 두 번, 세 번, 더 나아가 열 번 읽어서 완전히 흡수하고 싶습니다. 제대로 흡수해서 내 프로젝트에 적용해보고 싶습니다.
 

한 줄로 표현하자면?

22년 경력의 소프트웨어 전문가에게 직접 배우는 듯한 경험을 제공해주는 책

  "한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

프론트엔드를 하다보면 함수형 프로그래밍에 대해서 조금씩 듣게 된다. 자주는 안듣는데, 용어에서 은연중에 숨어서 아닌척 하는 그런 양상같다. 백엔드를 하다보면 객체지향 프로그래밍이 굉장히 단단하게 자리잡고 있다. 객체와 디자인 패턴을 공부하는게 너무 당연하게 보이는 일이다.
그런데? 그런 생각이 들 때가 있다. 고질라랑 킹콩이 싸우면 누가 이길까와 비슷한 생각? 아이언맨이랑 캡틴 아메리카의 크로스오버처럼 객체지향이랑 함수형이 싸우면 누가 이길까? 누가 더 좋나? 둘이 동시에도 쓰나? 섞이나? 그런 만약에를 해소해주는 책이 이 책이다.

시작에 앞서

유인동님은 자바 스크립트를 하다보면 한 번씩 듣게되는 사람인 것 같다. 인프런의 함수형 프로그래밍 강의로 엄청 유명하다. 막상 함수형 공부를 하지 않아서 잘 보지 않았지만 네임드 선생님의 책을 읽을 수 있다면 너무 좋은 기회지 않을까? 그래서 한빛 미디어에 그 책이 나왔다는 소식을 볼 때부터 5월 나는 리뷰어다 서적을 신청할 때 나오길 바랬다.

난 함수형 프로그래밍을 겉핥기로만 공부했다. 유인동님의 인터넷 강의도 소마 시절에 구매할 수 있었는데, 아직도 안봤다. 객체지향에 대해서도 겉핥기로 대충만 아는 것 같다. 생각해보면 잘 모른다. 반성할 일이다.

코드를 다루는 사고력(?)을 만들어주는 책

코드에 대해서 책처럼 이렇게까지 생각해본 적이 없는 것 같다. 안해본 생각을 해야하니 머리가 아프기도 하고 그랬다.
책의 시작부터 이터레이터를 만들면서 시작하니까 아득했던 기억이 난다. 코드가 거기서 거기고 문제 해결에 맞춰서, 적당한 디렉토리, 파일 구조에 만들면 끝이 아니구나 싶었다.

두 패러다임은 각기 다르게 사용되는게 아니라 동시에 유연하게 '멀티 패러다임'으로 쓰인다. 내딴엔 자바 스크립트, 타입 스크립트를 쓴다고 쓴거같은데, 겉돌면서 쓴것 같다는 기분이 들 정도로 뇌가 말랑말랑해지고 함수형, 객체지향, 거기에 비동기처리까지 공부하고 생각해볼 기회가 된 것 같다.

고인물 st 프로그래밍

어렸을 때 스타크래프트 게임을 해보면 입문이 어렵지 않은데, 실력 위에 실력이 있고, 그거보다 더 잘하는 사람이 있다. 더 멋진 전략, 최적화 전략이 장군 멍군하면서 있다. 그런 전략이 생각이 필요하지 않을 정도로 익숙해진 사람들은 숨쉬듯이 사용하게 되곤 한다. 이후엔 피지컬과 순간의 판단력이 중요해지는 프로게이머나 고인물들의 각종 응용을 볼 수 있다.

타입 스크립트는 그렇다하게 문법이 난해하지 않았다. 리액트도 하다보면 할만하다. 충분히 익숙해지면 기존의 방식은 너무 당연하고 숨쉬듯이 더 최선의 방법을 찾아낼 것 같다. 이 책은 그런 책이었다.
고차 함수 맛볼래요? 프론트엔드와 객체지향의 크로스 오버는 어때요? 이런 패턴 어떄요? 리스트 프로세싱을 더 맛있게 해볼까요? 같은 사고의 확장을 불러오는 책이다.

마치면서

이번 방학때는 꼭 이 책으로 스터디를 해야겠다는 나쁜 생각을 하고 있다. 누가 같이 해줄지 모르겠지만 기대된다. 그리고 방학에 다 읽으면 서평을 다시 쓰고 싶다. 진득하게 읽어보면서 즐길 시간이 부족해서 아쉬웠다.

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다

요즘 IT 개발계에서는 ‘패러다임’이라는 단어가 더 이상 낯설지 않게 느껴집니다. 특히 다양한 기술 스택과 빠르게 변화하는 요구사항 속에서 살아남아야 하는 스타트업 팀장 입장에서는, 어떤 상황에서도 유연하게 대처할 수 있는 설계 사고와 철학이 절실하죠. 그런 맥락에서 최근 제가 발견한 한 권의 책, 바로 『멀티패러다이밍(Multi Paradigming)』은 단순한 이론서를 넘어선, 실무적 통찰로 가득한 책이었습니다.

 

프론트엔드 개발자로 8년간 다양한 스타트업 프로젝트를 거쳐오면서, 저는 언제나 “이 기능은 객체지향으로? 함수형으로? 아니면 선언형으로 풀어야 할까?”라는 고민을 반복해왔습니다. 특히 팀장을 맡은 이후부터는 단지 코드를 잘 짜는 것보다 어떻게 구조를 짜야 팀 전체가 효율적으로 협업할 수 있을까에 더 많은 고민이 쏟아졌고요. 그 와중에 『멀티패러다이밍』은 마치 복잡한 퍼즐 조각을 맞추는 힌트를 준 느낌이었습니다.

 

이 책은 멀티패러다임에 대한 이론적인 소개에 그치지 않고, 어떻게 실제 프로젝트에 적용할 수 있는지를 풍부한 사례와 함께 설명해줍니다. 특히 객체지향, 함수형, 선언형, 반응형 등 다양한 패러다임이 실제로 팀 내 설계와 협업에 어떤 영향을 미치는지를 다룰 때는, 몇 번이고 다시 읽어야 할 정도로 깊이 있고 유익했습니다. 

스타트업 개발 리더들에게 강력히 추천하고 싶습니다.

한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬받아 작성된 서평입니다

 

이 책은 단순히 ‘패러다임을 나열하는 설명서’가 아니라, 각각의 패러다임이 코드에서 어떻게 현실적으로 섞이고, 시너지를 내는지를 체감하게 해줍니다. 프로그래밍 언어에 대한 이해를 넘어, 문제를 해결하는 사고의 도구로서 패러다임을 바라보는 관점을 배우게 된 점이 무엇보다 큰 수확이었습니다. 결국 책에서 말하듯 이미 일상적으로 여러 패러다임을 혼용하며 개발하고 있었고, 다만 그 원리를 잘 알지 못했던 것뿐이었다는 걸 깨닫는 계기가 되었습니다.

 

저는 자바 백엔드 개발자이지만, JavaScript, TypeScript로 작성된 예제에 대해서는 언어적인 허들이 크지 않았습니다. 언어별 공식 문서가 잘 되어 있고, 문법보다는 이터러블 프로토콜 기반으로 개념과 구조, 패러다임 활용에 집중하는 책의 구성 덕분에 예제를 이해하고 따라가는 데 큰 어려움은 없었습니다. 익숙하게 사용해 온 표준 라이브러리에 대해 단순히 “이렇게 사용하면 된다”에서 벗어나 “왜 이렇게 동작하는가”,  “언제 이런 패턴을 선택할 것인가”에 대해 더 깊이 생각해보고, 시야를 넓히는 좋은 계기가 될 것입니다. 리뷰를 작성하는 시점에서는 중반부까지 읽었지만 비동기 프로그래밍, 리스트 프로세싱처럼 실무와 밀접한 주제들이 남아 있다는 점에서, 이 책을 끝까지 읽어 볼 가치가 있다고 개인적으로 생각합니다.

  “한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.”

 

- 1장: 책은 현대 프로그래밍 언어가 멀티패러다임으로 발전하게 된 시작점과 교착점을 이야기하며 시작한다.

- 2장: LISP 라는 함수형 프로그래밍 언어로 함수형 언어의 장점, 타입 추론, 함수 타입, 제네릭 개념과 활용 방법을 알아본다. 그리고 메타 프로그래밍이란 무엇이고, 그 역할은 무엇인지 논의한다.

- 3장: 코드, 객체, 함수의 관계와 IP(명령형), OOP(객체지향), FP(함수형) 각각에서 어떻게 사용되는지 설명한다. 이 장에서는 하스켈 언어가 나오며 지연 평가, Generator, Iterator, 합성을 구현하고 활용하는 방법에 대해 배운다.

- 4장: 비동기 프로그래밍의 중요성과 다양한 모델을 알아보며, 비동기 작업의 결과를 값으로 다루며 가독성과 유지보수성을 높이는 방법을 배우며 비동기에서의 지연 평가 방법도 알아본다.

- 5장: 실전 함수형 프로그래밍에 대해서 배워본다. 함수형으로 알고리즘 문제 풀기, 백엔드 프로그래밍(스케줄러), 리스트 프로세싱 패턴화를 통해 실전 감각을 익혀본다. 이 장에서 마플코퍼레이션 현우님의 FxTS 라이브러리가 나온다! 얼마나 기쁠까.. 내 책에 같은 회사 동료분이 개발한 우리 회사의 라이브러리를 싣는 느낌은..!?

- 6장: HTML 템플릿 엔진, 동시성 핸들러를 만들면서 여러 패러다임을 조합한 프로그래밍을 배운다. 객체지향, 함수형, 명령형을 언제 어느 상황에서 조합해야 하는지 명확한 가이드를 받을 수 있었다.

- 7장: Setting App, Todo App을 만들고 발전시켜보면서 객체지향설계를 기반으로 한 프런트엔드 개발과 멀티패러다임 프로그래밍 패턴을 배워 볼 수 있다.

 

저자의 생각 흐름을 읽으며, 소통하는 것 같은 느낌

저자분이 독자와 소통하는 것 같은 느낌으로 [왜 ~하지 않을까?], [가상의 예시] 등을 들어서 왜 그렇게 하지 않았는지에 대한 설명을 위한 빌드업을 느낄 수 있었다.

 

반복적 개념 요약

명령형 방식(IP), 객체지향적 방식(OOP), 함수형 방식(FP)가 어떻게 다른지 앞에 나왔던 부분을 반복적으로 요약해주기도 하였다.

 

Promise의 발전 과정

JS/TS에 필수적인 Promise가 ES의 역사와 함께 어떻게 발전해왔나 알아볼 수 있었다.

Java로 치면 Future, CompletableFuture 등을 예로 들 수 있을 것 같다.

 

연습문제 구성

많지는 않았지만, 코드를 따라치기에 지루하셨던 분들을 위한 연습문제도 제공된다.

 

ChatGPT 사용 후 개선

저자님이 현업에서 ChatGPT한테 어떻게 프롬프트를 하고, 결과물을 어떤 방식으로 바꿔나가는지 볼 수 있었다.

 

실전 연습

1~4장에서 배운 개념을 토대로 5,6,7장에서는 이커머스 현업 예시, HTML 템플릿 엔진 개발, Todo App 3단계 개선 등을 통해 멀티 패러다임 프로그래밍을 체화할 수 있도록 설계→구현→반복→개선을 구성하였다.

 

저는 객체지향과 함수지향 이 두 패러다임이 공존하기는 어렵다고 생각했었지만, 이 책을 통해 개안을 하였습니다!

구조 문제는 객체지향으로, 로직 문제는 함수형으로 해결하기

개요

마플코퍼레이션 CTO 유인동님이 집필한 이 책은 한빛미디어에서 2025년 출간된 실무 중심의 프로그래밍 서적 GitHubHanbit으로, 현대 소프트웨어 개발에서 필수가 된 멀티패러다임 프로그래밍에 대한 포괄적인 안내서입니다.

책의 핵심 가치

현대 개발 환경에서는 단일 프로그래밍 패러다임만으로는 복잡한 문제를 효율적으로 해결하기 어려운 경우가 많습니다. 이 책은 객체지향, 함수형, 명령형 프로그래밍의 강점을 통합해 더 유연하고 견고한 소프트웨어를 설계할 수 있도록 실무 중심으로 설명 aladinHanbit합니다.
특히 TypeScript를 기반으로 반복자와 제너레이터, 리스트 프로세싱, 고차 함수 등 현대 언어의 기능 멀티패러다임 프로그래밍을 다루며, 이론과 실제 구현을 균형 있게 제시한 점이 인상적입니다.

주요 강점

실무 중심 접근: 이터레이션 프로토콜이 특정 언어나 패러다임에 구애받지 않는 공통 규약임을 보여주며, 다양한 패러다임을 활용하면서도 서로 잘 어우러지게 하는 멀티 패러다임 프로그래밍 멀티패러다임 프로그래밍 1편: 반복자 패턴 & LISP (with TypeScript, Clojure, Kotlin) 강의 | MDU 유인동 - 인프런의 실현 가능성을 구체적으로 제시합니다.
체계적인 학습 구조: 각 패러다임의 독립적 학습보다는 이들 간의 상호작용과 통합적 사용에 중점을 둔 접근방식이 돋보입니다.
현대적 기술 스택: TypeScript를 주 언어로 선택하여 현재 개발 트렌드를 반영하고, 실제 개발 환경에서 바로 적용 가능한 내용을 제공합니다.

독자층과 활용도

이 책은 다음과 같은 독자들에게 특히 유용할 것으로 보입니다.

  • 단일 패러다임에 익숙한 개발자가 사고의 폭을 넓히고자 할 때
  • 복잡한 소프트웨어 아키텍처 설계에 고민이 있는 중급 이상 개발자
  • 현대적 개발 방법론을 체계적으로 학습하고자 하는 개발자

전체적 평가

마플코퍼레이션 CTO로서 실무 경험을 바탕으로 한 저자의 통찰 멀티패러다임 프로그래밍과 리스트 프로세싱 | kciter.so이 잘 녹아든 실용적인 책입니다. 단순히 각 패러다임을 나열하는 것이 아니라, 이들을 어떻게 조화롭게 활용할 수 있는지에 대한 구체적인 방법론을 제시한다는 점에서 기존 프로그래밍 서적들과 차별화됩니다.
특히 현대 개발에서 중요해진 함수형 프로그래밍 개념을 객체지향과 명령형 패러다임과 자연스럽게 융합하는 방법을 보여준 점이 이 책의 가장 큰 가치라고 할 수 있습니다. 프로그래밍 패러다임의 진화와 현실적 적용을 고민하는 개발자들에게 실질적인 도움이 될 것으로 예상됩니다.재시도Claude는 실수를 할 수 있습니다. 인용된 출처를 반드시 다시 확인해 주시기 바랍니다.


 


[ 한빛미디어 서평단 '나는 리뷰어다' 활동을 위해서 전자책을 협찬 받아 작성된 서평입니다. ]

 

- 멀티패러다임?

 개발은 참 어렵다. 매일 같이 새로운 방법론과 기술이 등장하여 기술 하나 배워 먹고 사는 사람들을 괴롭힌다.

'더 좋은 방법을 찾자' 에서 시작 된 것이 개발이니, 그게 매력이라고 볼 수도 있겠지만 꼭 새로운 것이 좋은 것만은 아니기에 또 그것이 반드시 좋은 것이라고 할 수도 없을 것이다.

 멀티 패러다임은 이런 시선에서 등장한 이름이 아닐까 싶다. 보통 어떤 디자인 패턴, 방법론 들이 각자의 장점을 내새우며 기존의 것보다 낫다고 하는 것이니 그 장점들을 모두 살려 필요한 곳에 적재적소 활용하면 어떨까? 라는 느낌에서 말이다.

 

 

- 어떤 내용이 담겨있을까?

책 내용 중

라고 저자는 이 책을 소개한다.

 

 이 책을 처음 펼쳐보고 놀란 것은, 추천의 말과 베타리더의 말이 약 30p가 된다는 것이다. 그만큼 많은 사람들의 신뢰를 받고 있는 저자가 쌓은 지식으로 출간된 책이라는 것을 알 수 있다.

 이 책은 타입스크립트와 자바스크립트를 사용하는 개발자에게 유용하며 Node.js 언어를 다루는 백엔드 개발자에게도 도움이 된다고 특히 중급 이상 개발자로 성장하고자 하는 분에게 적합하다고 한다.

 

 

- 읽어보고 나니?

 대상 독자에서 밝힌 만큼 웬만한 자바스크립트 경험을 갖고 있다면 읽기가 수월하지 않을 것 같다. 1장부터 대부분의 예시에 등장하는 iterator 는 이론적으로 '어떤 것이다~' 정도로 두루뭉실하게 알고만 있고 사용해본적은 없었기에 이것을 활용한 예시를 보면서 '1장부터 무슨 이야기를 하는거지?' 가 머리속에서 떠나질 않았다.

 하지만 각 장의 마지막에 위치한 '요약 정리' 라는 곳을 통해 어느정도 정리된 내용을 볼 수 있었기에 '이런 내용을 이야기했구나' 정도는 알 수 있었다.

이론 설명엔 필수...!


 이 책을 읽으면서 가장 반가웠던 순간은 4장, 'Promise' 이야기를 할 때가 아닐까 싶다. 웹 개발을 하면서 가장 많이 접하고, 한번 꼬이면 푸는데 시간이 가장 많이 걸렸던 비동기와 관련된 이야기로 구성되어 있다. 물론 내용에서 아는 것이라곤 20%도 안되는것 같지만 그동안 사용하면서도 몰랐던 기능들에 대해 알 수 있었고, 그동안의 경험에 비추어보며 새롭게 알게 된 내용을 그 때 적용했더라면 더 수월하지 않았을까 하고 생각에 잠기기도 했다.

 다양한 내용들을 지나 7장에서는 직접 앱을 만들어보는 파트가 존재한다. 6장에서 진행했던 HTML 템플릿을 이용하기 때문에 직접 따라서 만들어보고자 한다면 6장을 꼭 거쳐서 오길 바란다.

 아는 내용이 많지 않다보니 읽는게 참으로 힘들었다. 물론 짜투리 시간에 책을 틈틈히 읽는 것이라서 지친 탓도 있겠지만 난 이만큼이나 해왔는데도 모르는게 많네 라는 씁슬함 때문에 더 힘들지 않았나 싶다.

 

 

- 개발의 세계는 어렵고도 험난하다.

 많은 추천사가 있다고 꼭 내게 어울리는 것은 아니라는 것은 이전부터 알고 있었다. 모두가 좋다고 나도 좋은것은 아니기에 나한테 맞는 것을 찾는 노력을 해야 하는 것이라고 생각한다. 이 책도 마찬가지, 개발 일을 5년 넘게 하면서 못만들것은 없겠다 싶은 생각이 들지만 누군가는 어딘가에서 더 나은 개발 방법을 찾아 조금 더 안정적이고 빠르고 멋진 것을 만드는 연구를 하고 있다.

 그 패러다임에 따라가기 위해서는 꾸준히 노력을 할 수 밖에 없구나 싶은데 막상 공부를 하려고 하면 어디서부터 어떻게 무엇을 봐야할지 알 수 없는게 대부분이고 도와주는 이가 없다는 것이 현실이다.

 개발자가 되기 위한 로드맵이라고 보면 대부분 언어를 '무엇부터 배워라~' 정도이지 어떤것을 어떻게 공부해야 더 나은 개발자가 되는지는 알려주는 것이 없는것 같다. 시리즈물로 단계별 이론 서적이 나왔으면 좋겠다는 생각이 든다.

7장 제일 마지막 부분, ' 이 간단한 앱은' 이라니...!

"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬받아 작성된 서평입니다."

 


함수형 프로그래밍이 대세라는 느낌에 갈아타고는 싶지만 매일 작성하는 코드가 객체지향이다.
객체지향으로 충분하고 함수형 프로그래밍은 특정 분야에서만 쓰이는 정도로 생각한다.
객체지향 프로그래밍으로 나름 한다고 하지만 만들어진 코드를 보면 이게 맞는지 의심스러울 때가 많다.
위 세 가지 가운데 하나라도 해당하시면 이 책을 읽으시면 됩니다.
그렇지 않더라고 개발 중인 프로그램 코드가 예전 코드를 답습하는 듯하고,
개발자로서 성장이 정체되어 있는 듯한 느낌을 가지고 계신다면 이 책을 읽으시면 됩니다.


초점이 명확합니다

변수 선언, 조건문, 순환문, 자료형 같은 기초구문은 다루지 않습니다.
바로 본론으로 들어갑니다.
멀티패러다임에 초점을 맞추고 있어서 특정 언어에 매여있지 않습니다.
주로 타입스크립트 코드를 이용하여 설명하지만 타입스크립트를 모른다고 해서 큰 어려움은 없습니다.
주로 사용하는 언어에서 타입스크립트로 보여주는 개념과 비슷한 개념이 있을 가능성이 큽니다.
정도의 차이가 있겠지만, 요즘 웬만한 프로그램 언어는 멀티패러다임을 지원하기 때문입니다.


방향을 보여줍니다

프로그램 언어를 다루는 게 아니라 프로그래밍을 다룹니다.
앞에서도 말씀드렸지만 프로그래밍 언어를 익히는 게 아니라 문제해결을 위한 프로그래밍을 익힙니다.
그중에서도 리스트, 반복자 패턴에 집중합니다. 이것저것 건드리지 않고 한 가지만 파고듭니다.
처음에는 반복을 위한 개념부터 시작하여 조금씩 바꿔갑니다.
생각보다 무겁지 않고 바뀌는 코드를 따라가다 보면 흥미진진합니다.
명령형이나 객체 지향으로 코딩하면서 간혹 볼 수 있었던 함수형 스타일이 뭔지 제대로 보여줍니다.
읽으면서 머릿속에 있는 사고방식이 재조립되는 듯한 느낌을 받았습니다.
그 정도로 코드를 보는 시각이 바뀔 수 있습니다.


많이 시도해 봐야겠다는 생각을 들게 합니다

같은 주제를 풀어내는 여러 방식을 보여주고 풀어주는데 그치지 않습니다.
보통은 이런 일을 하기 위해 이렇게 코드를 짠다고 알려줍니다. 시작한 다음 바로 결론을 보여주고 그치는 경우가 많습니다.
이 책은 다릅니다. 단순히 기능을 구현하는데 그치지 않습니다. 문제를 찾고 개선하고, 개선하고, 개선하기를 반복합니다.
그리하여 마침내, 멀티패러다임을 어떻게 적재적소에 적용하는지 보여줍니다.
코드가 바뀌어 가는 과정을 따라가다 보니 저자가 개념을 적용하며 코드를 개선해 나가는 모습이 그려지는 듯했습니다.
생각하고 시도하고 확인하고 고쳐나가는 반복을 어마어마하게 했을 것 같다는 생각이 들었습니다.

 

 

함수형 프로그래밍 도입을 일부 시도했다가 멈추었던 기억이 있습니다. 함수를 연결할수록 점점 복잡해져, 문제 해결은 뒷전이고 함수 연결 문제를 이해하고 풀어내는데 급급해 읽기도 힘든 코드를 만들었습니다.
지금 보니 멀티패러다임 개념이 없었기 때문이었습니다.
멀티패러다임 프로그래밍 덕분에 객체지향도 조금 더 이해하게 되었습니다.
멀티패러다임 프로그래밍을 통해 개발자로서 한 단계 더 성장하시기 바랍니다.

 

과거에는 함수형, 객체지향형이라는 언어를 각각 선택하여 각 언어의 체계를 사용하여 프로그래밍을 하였다.

하지만 이러한 방식의 사용이 멀티패러다임이라는 언어로 발전하게 되었다.

대부분 사용하는 언어가 객체지향형, 명령형, 그리고 함수형을 동시에 지원하게 되었다고 한다.

이런 언어가 객체지향형을 기반으로 시작되었고 여러 기능을 포함하여 다양한 기능을 제공하고 하나의 언어에서 멀티 패러다임을 지원하게 되었다.

이런 언어의 체계변화가 혼란스러울 수 있지만 이런 변화는 다양하게 조합하여 더 나은 코드를 작성할 수 있게 하였고 여러 문제를 해결할 수 있는 방식도 제공하게 되었다.

이 책은 이런 멀티패러다임이 언어를 확장하게 한 여러 기법들에 대한 소개와 함께 이러한 방법이 설계된 이유를 다루어 이해를 돕는다.

이후 타입스크립트로 예시 코드로 타입 추론과 함수 타입을 통해 코드이 안정성과 가독성을 높이는 방식으로 안전하게 코드를 작성하여 함수의 반환 타입을 자동으로 추론하는 내용을 다루며 고차 함수를 구성하는 패턴과 LISP 계열 언어로 코드와 데이터를 동일하게 취급하는 메타 프로그래밍의 장점을 소개한다.

뿐만 아니라 코드와 객체, 함수가 각각 제너레이터, 이터레이터, 그리고 LISP와 유사한 관계를 소개하여 명령형, 객체지향적, 함수형 접근 방식을 모두 가지는 프로그래밍 모델을 만들 수 있는 방식을 이해하도록 한다.

또한 코드와 데이터의 경계가 없는 프로그래밍 언어의 특징을 가지는 LISP를 통해 앞서 설명했듯이 코드와 데이터의 경계가 없는 특성을 반영하고 하스켈을 통해 함수형 프로그래밍의 이점을 이해하여 프로그래밍에 적용하는 방식을 배우고 안전하고 가독성을 높일 수 있도록 한다.

또한 가장 관심있게 읽었던 부분인 비동기 처리를 통해 애플리케이션의 성능과 응답을 높이고 이를 통해 네트워크 뿐만 아니라 I/O 처리의 큰 이점을 제공하는 중요한 기법을 다룬다.

이를 통해 Pomise로 여러 비동기 작업을 조합하고 제어하며 결과를 한번에 처리할 수 있도록 도와 비동기 작업의 흐름을 이해하도록 돕고 효율적으로 처리하는 방식을 배울 수 있다.

에러 처리 부분에 있어서도 에러의 원인을 찾도록 돕고 이를 해결하는 방식을 명확히 이해하도록 돕는다.

중반부에서는 앞서 이해한 프로그램 기법을 통해서 다양한 데이터 구조에서 코드의 일관을 유지하고 데이터의 각 처리 단계를 독립적으로 하도록 코드를 작성하게 하여 코드의 재사용성을 높여 여러 조건이 추가되거나 로직이 수정되어도 복잡하지 않게 수정할 수 있도록 도와 유지보수의 이점을 실제 데이터와 코드를 작성해봄으로써 이해하도록 돕는다.

이후에는 복잡한 문제 상황에서 상황에 따라서 객체지향, 함수형, 명령형 패러다임을 적절히 조합하여 사용하는 전략을 다루어 멀티 패러다임의 강점을 통해 복잡한 요건들을 쉽게 해결할 수 있도록 돕는다.

이 책은 나와 같이 객체지향 프로그래밍에 익숙한 개발자들이 함수형, 명령형 언어의 이점과 처리 방식을 정확히 이해하여 여러 상황에서 적절히 조합하여 정확히 사용할 수 있는 도와 멀티패러다임의 강력한 장점을 이해도록 돕는다.

타입스크립트로 설명되어 있어 사용해보지 않은 분들은 예시 코드의 이해가 조금은 어려울 수 있지만 각 챕터별 개념을 먼저 이해해보는 것도 추천한다.

다양한 서비스를 개발하면서 여러 상황에 따라 객제치향, 함수형, 명령형 프로그램 기법을 적절히 활용한다면 유연하고 완성도 있는 코드를 작성할 수 있을 것이라고 이 책을 읽으면서 생각이 들었다.

`Vanilla JS / TypeScript` 환경에서 자료관리, 비동기 상태관리, 함수형 프로그래밍에 대한 저자의 아이디어와 실전예제 코드를 제공하는 책 입니다. 본인이 typescript 로 작성된 패키지를 보완 및 수정하는 git Contributer  로 활동하시는 분들이라면 많은 아이디어와 고급코드등을 얻는데 많은 도움이 되어 줄 것입니다.

 

반면, react.js / Next.js 등 기능제공 npm 패키지를 활용하시는 분들에게는 조금은 어렵고 생소한 내용일 수 있습니다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원 무료배송
닫기

리뷰쓰기

닫기
* 상품명 :
멀티패러다임 프로그래밍
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
멀티패러다임 프로그래밍
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
멀티패러다임 프로그래밍
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?