멀티패러다임 프로그래밍 (객체지향, 함수형, 명령형의 통합적 사고로 구현하는 소프트웨어 설계와 구현)

멀티패러다임 프로그래밍 (객체지향, 함수형, 명령형의 통합적 사고로 구현하는 소프트웨어 설계와 구현)

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

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

유인동

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

목차


1장멀티패러다임이현대언어를확장하는방법
1.1객체지향디자인패턴의반복자패턴과일급함수
__1.1.1GoF의반복자패턴
__1.1.2ArrayLike로부터Iterator생성하기
__1.1.3ArrayLike를역순으로순회하는이터레이터만들기
__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.1forEach함수
__1.4.2map함수
__1.4.3filter함수
__1.4.4고차함수조합하기
__1.4.5재미난filter
1.5이터러블프로토콜이상속이아닌인터페이스로설계된이유
__1.5.1WebAPI의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.1PipeOperator
__2.3.2클래스와고차함수,반복자,타입시스템을조합하기
__2.3.3LISP(클로저)에서배우기-코드가데이터,데이터가코드
__2.3.4클로저에서map이실행될때
__2.3.5멀티패러다임언어에서사용자가만든코드이자클래스를리스트로만들기
__2.3.6LISP의확장성-매크로와메타프로그래밍
__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.3main함수와IO
__3.2.4head,map,filter,foldl함수시그니처
__3.2.5함수합성-.연산자와$연산자
__3.2.6sumOfSquaresOfOddNumbers함수
__3.2.7파이프라인스타일-&
__3.2.8Either를통한에러처리
__3.2.9패턴매칭
3.3지연평가자세히살펴보기
__3.3.1중첩된이터레이터의실행순서-제너레이터로확인하기
__3.3.2자세히살펴보기
__3.3.3이터레이터로직접살펴보기
__3.3.4단순화해서살펴보기
3.4Generator:Iterator:LISP-지연평가와안전한합성
__3.4.1find함수시그니처
__3.4.2하스켈에서find함수와안전한합성
__3.4.3find함수로생각하는지연평가와리스트프로세싱
__3.4.4타입스크립트에서의안전한합성
__3.4.5every함수
__3.4.6some함수
__3.4.7지연평가에기반한break로직끼워넣기
__3.4.8every와some함수의공통로직을함수형으로추상화하기
__3.4.9concat으로더하기
3.5요약정리

4장비동기프로그래밍
4.1값으로다루는비동기
__4.1.1Promise__4.1.2newPromise()를직접사용해본적있는가
__4.1.3Promise.race
__4.1.4IO작업에타임아웃설정하기
__4.1.5응답속도에따라다른전략으로UI렌더링하기
__4.1.6Promise.all
__4.1.7Promise.allSettled
__4.1.8Promise.any
4.2지연성으로다루는비동기
__4.2.1Promise실행을지연하려면
__4.2.2챗GPT가명령형으로구현한동시성핸들링함수
__4.2.3함수형으로구현한동시성핸들링함수
__4.2.4효과적인비동기핸들링으로가는계단-지연성
4.3타입으로다루는비동기
__4.3.1AsyncIterator,AsyncIterable,AsyncGenerator프로토콜
__4.3.2AsyncIterable을다루는고차함수
__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.12차원배열에서숫자다루기
__5.1.2농구팀데이터다루기
__5.1.3커머스데이터다루기
__5.1.4커머스데이터다루기2
__5.1.5일관된접근방식으로문제해결하기
5.2더많은문제에적용하기
__5.2.1pipe함수
__5.2.2pipe와비동기함수합성
__5.2.3zip함수
__5.2.4인덱스가값으로필요할때
__5.2.5콜라츠추측-1이될때까지세기
__5.2.6break를대신하는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.1HTML템플릿엔진만들기
__6.1.1TaggedTemplates
__6.1.2리스트프로세싱으로구현하기
__6.1.3push를concat으로
__6.1.4XSS공격방지
__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.1executeWithLimit다시보기
__6.2.2챗GPT가명령형으로구현한동시성핸들링함수
__6.2.3멀티패러다임으로구현한동시성핸들링함수
__6.2.4동시성(부하)크기를동적으로변경할수있도록확장하기
__6.2.5무한반복되는작업의부하조절하기
__6.2.6runAllSettled추가하기
6.3요약정리

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

출판사 서평

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

객체지향,함수형,명령형은더이상대립하거나경쟁하는개념이아닙니다.현대언어들은여러패러다임을포용하며더욱유연하고강력한도구로진화하고있습니다.하지만언어가멀티패러다임을지원한다고해서개발자가자연스럽게그잠재력을활용하게되는것은아닙니다.앞으로는다양한패러다임을‘어떻게’‘조화롭게’다룰수있는지가더중요합니다.이책은그과제에실용적인답을제시합니다.
실제서비스에서마주하는복잡한문제를어떻게멀티패러다임적으로사고하고해결할수있을지구체적인코드와함께보여줍니다.반복자패턴,고차함수,제너레이터같은객체지향과함수형의고급개념을하나의맥락속에서통합해설명하며타입스크립트를중심으로LISP,하스켈,자바등의철학을자연스럽게연결해냅니다.
멀티패러다임프로그래밍은언어에국한되지않습니다.프런트엔드개발자는자바스크립트의본질과새로운설계감각을,백엔드개발자는비동기프로그래밍을잘다루는법과효율적이고안전한데이터처리방법을익히게될것입니다.

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

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

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