쏙쏙 들어오는 함수형 코딩 : 심플한 코드로 복잡한 소프트웨어 길들이기

쏙쏙 들어오는 함수형 코딩 : 심플한 코드로 복잡한 소프트웨어 길들이기

$38.75
Description
함수형 개발자는 어떻게 생각하고 코드를 작성할까
함수형 프로그래밍은 절차적 프로그래밍, 객체 지향 프로그래밍과는 다른 새로운 방식의 프로그래밍이다. 따라서 함수형 프로그래밍을 배운다는 것은 새로운 방식으로 사고하는 방법을 배우는 것이다. 그렇다면 함수형 개발자는 어떤 방식으로 생각하고 소프트웨어를 만들까.
이 책은 함수형 프로그래밍의 가장 기본이 되는 부수 효과를 다루는 방법으로 시작한다. 먼저 부수 효과가 있는 함수인 액션과 부수 효과가 없는 계산을 구분하는 법을 배우고, 둘을 구분한 후에는 부수 효과가 있는 액션을 어떻게 하면 줄일 수 있을지, 액션을 계산으로 바꾸는 방법에는 어떤 기술이 있는지 이야기한다. 다음으로 일급 함수의 개념을 배우고 고차 함수를 사용하여 반복문을 줄이는 방법에 대해 설명한다. 이를 배우면 함수 단위의 코드를 재사용할 수 있고, 테스트하기 쉬워진다. 이러한 과정을 단계별로 설명하고 있어 이론으로 배운 내용을 어떻게 적용하는지 쉽게 이해하고 따라 할 수 있도록 하였다.
이 책에 사용된 예제 코드는 자바스크립트로 작성되었다. 자바스크립트는 완벽한 함수형 언어는 아니지만, 함수형 언어의 기능이 부족하므로 함수형 사고를 설명하기 좋은 언어다. 부족한 함수형 기능을 직접 만들어 보면서 함수형 개념을 보다 깊이 이해하도록 설명하고 있다.
이 책은 현실에 있을 법한 사례를 만들어 이야기를 이끌어 간다. 마치 회사의 개발팀이 된 것 같은 느낌으로 진행되어 재밌게 빠져들 수 있도록 구성되었다. 개발팀에 합류하여 함수형 개발자는 소프트웨어를 만들기 위해 어떤 사고를 하는지 옆에서 지켜볼 수 있다.
설령 함수형 언어를 사용하지 않거나 함수형 프로그래밍에 관심이 없더라도 함수형 사고를 배워둔다면 새로운 사고방식을 통해 문제해결력을 키울 수 있을 것이다. 함수형 프로그래밍을 배우고 싶은 독자는 물론이고, 프로그래밍을 조금 더 간결하고 깔끔하게 하고 싶은 모든 개발자에게 이 책을 소개한다.

대상 독자
■ 2~5년 정도 소프트웨어 개발 경험이 있는 현업 종사자
■ 간단한 시스템을 만들고 있지만 큰 시스템을 다루는 것에 어려움을 느끼는 개발자

저자

에릭노먼드

저자:에릭노먼드
경험많은함수형개발자이자교육자,발표자이며,함수형프로그래밍에관한책을저술했다.뉴올리언스출신으로2000년에리스프로프로그래밍을시작했으며,클로저학습자료를만들었다.기업들의비즈니스목표달성을위해함수형프로그래밍을이용한컨설팅을하고있다.국제적인프로그래밍콘퍼런스에강연자로자주나서며,저자의글이나발표와컨설팅,교육자료들은ericnormand.me에서확인할수있다.

역자:김은민
20년동안개발자로살았지만아직도좋은코드를만들기위한답을찾아가고있다.잠깐창업도해보고스타트업도다녔지만대부분의시간은다음과카카오에서일했다.한메일,마이피플,클라우드,카카오게임등을만들고운영했다.서비스에실제로함수형프로그래밍을적용하는데관심이많아카카오에서주로클로저를사용해일했다.2021년부터컨스택츠라는회사를운영하며하스켈로서비스를만들고있다.평소에는말이없지만개발에관한이야기를할때는말이많다.

목차

옮긴이머리말xvii
베타리더후기xix
추천사xxi
머리말xxvi
감사의글xxviii
이책에대하여xxx

CHAPTER1쏙쏙들어오는함수형코딩에오신것을환영합니다1
함수형프로그래밍은무엇인가요?2
실용적인측면에서함수형프로그래밍정의의문제점3
함수형프로그래밍정의가혼란스러운관리자4
함수형프로그래밍을학문적지식이아닌기술과개념으로보기5
액션과계산,데이터구분하기6
함수형프로그래머는부를때조심해야하는코드를구분합니다7
함수형프로그래머는실행하는코드와그렇지않은코드를구분합니다8
함수형프로그래머는액션과계산,데이터를구분합니다9
함수형프로그래밍에서는코드를세가지로분류합니다10
액션,계산,데이터를구분하면어떤장점이있나요?11
다른함수형프로그래밍책과다른점12
함수형사고가무엇인가요?13
이책을읽는기본규칙14
결론16

CHAPTER2현실에서의함수형사고17
토니피자에오신것을환영합니다18
파트I:액션과계산,데이터19
변경가능성에따라코드나누기20
파트II:일급추상21
분산시스템을타임라인으로시각화하기22
각각의타임라인은다른순서로실행됩니다23
어려운경험을통해분산시스템에대해배운것24
타임라인커팅:로봇이서로를기다릴수있게하기25
좋은경험을통해타임라인에대해배운것26
결론27

PARTI액션과계산,데이터
CHAPTER3액션과계산,데이터의차이를알기31
액션과계산,데이터32
액션과계산,데이터는어디에나적용할수있습니다33
장보기과정에서배운것36
새로만드는코드에함수형사고적용하기39
쿠폰보내는과정을그려보기42
쿠폰보내는과정구현하기47
이미있는코드에함수형사고적용하기54
액션은코드전체로퍼집니다56
액션은다양한형태로나타납니다57
결론59

CHAPTER4액션에서계산빼내기61
MegaMart.com에오신것을환영합니다62
무료배송비계산하기63
세금계산하기64
테스트하기쉽게만들기65
재사용하기쉽게만들기66
액션과계산,데이터를구분하기67
함수에는입력과출력이있습니다68
테스트와재사용성은입출력과관련있습니다69
액션에서계산빼내기70
액션에서또다른계산빼내기73
전체코드를봅시다85
결론86

CHAPTER5더좋은액션만들기87
비즈니스요구사항과설계를맞추기88
비즈니스요구사항과함수를맞추기89
원칙:암묵적입력과출력은적을수록좋습니다91
암묵적입력과출력줄이기92
코드다시살펴보기95
계산분류하기97
원칙:설계는엉켜있는코드를푸는것이다98
add_item()을분리해더좋은설계만들기99
카피-온-라이트패턴을빼내기100
add_item()사용하기101
계산을분류하기102
작은함수와많은계산106
결론107

CHAPTER6변경가능한데이터구조를가진언어에서불변성유지하기109
모든동작을불변형으로만들수있나요?110
동작을읽기,쓰기또는둘다로분류하기111
카피-온-라이트원칙세단계112
카피-온-라이트로쓰기를읽기로바꾸기113
원래버전과카피-온-라이트버전의차이보기117
앞에서만든카피-온-라이트동작은일반적입니다118
자바스크립트배열훑어보기119
쓰기를하면서읽기도하는동작은어떻게해야할까요?122
쓰면서읽기도하는함수를분리하기123
값을두개리턴하는함수로만들기124
불변데이터구조를읽는것은계산입니다131
애플리케이션에는시간에따라변하는상태가있습니다132
불변데이터구조는충분히빠릅니다133
객체에대한카피-온-라이트134
자바스크립트객체훑어보기135
중첩된쓰기를읽기로바꾸기140
어떤복사본이생겼을까요?141
얕은복사와구조적공유를그림으로알아보기142
결론145

CHAPTER7신뢰할수없는코드를쓰면서불변성지키기147
레거시코드와불변성148
우리가만든카피-온-라이트코드는신뢰할수없는코드와상호작용해야합니다149
방어적복사는원본이바뀌는것을막아줍니다150
방어적복사구현하기151
방어적복사규칙152
신뢰할수없는코드감싸기153
방어적복사가익숙할수도있습니다156
카피-온-라이트와방어적복사를비교해봅시다158
깊은복사는얕은복사보다비쌉니다159
자바스크립트에서깊은복사를구현하는것은어렵습니다160
카피-온-라이트와방어적복사의대화162
결론165

CHAPTER8계층형설계I167
소프트웨어설계란무엇입니까?168
계층형설계란무엇인가요?169
설계감각을키우기170
계층형설계패턴171
패턴1:직접구현172
3단계줌레벨186
반복문빼내기189
직접구현패턴리뷰198
결론199

CHAPTER9계층형설계II201
계층형설계패턴202
패턴2:추상화벽203
추상화벽으로구현을감춥니다204
세부적인것을감추는것은대칭적입니다205
장바구니데이터구조바꾸기206
장바구니를객체로다시만들기208
추상화벽이있으면구체적인것을신경쓰지않아도됩니다209
추상화벽은언제사용하면좋을까요?210
패턴2리뷰:추상화벽211
앞에서고친코드는직접구현에더가깝습니다212
패턴3:작은인터페이스213
패턴3리뷰:작은인터페이스219
패턴4:편리한계층220
계층형설계패턴221
그래프로알수있는코드에대한정보는무엇이있을까요?222
그래프의가장위에있는코드가고치기가장쉽습니다223
아래에있는코드는테스트가중요합니다225
아래에있는코드가재사용하기더좋습니다228
요약:그래프가코드에대해알려주는것229
결론230

PARTII일급추상
CHAPTER10일급함수I233
마케팅팀은여전히개발팀과협의해야합니다235
코드의냄새:함수이름에있는암묵적인자236
리팩터링:암묵적인자를드러내기238
일급인것과일급이아닌것을구별하기240
필드명을문자열로사용하면버그가생기지않을까요?241
일급필드를사용하면API를바꾸기더어렵나요?242
객체와배열을너무많이쓰게됩니다247
어떤문법이든일급함수로바꿀수있습니다250
반복문예제:먹고치우기253
리팩터링:함수본문을콜백으로바꾸기259
이것은무슨문법인가요?262
왜본문을함수로감싸서넘기나요?263
결론265

CHAPTER11일급함수II267
코드냄새하나와리팩터링두개268
카피-온-라이트리팩터링하기269
배열에대한카피-온-라이트리팩터링270
함수를리턴하는함수279
결론288

CHAPTER12함수형반복289
코드냄새하나와리팩터링두개290
MegaMart에서커뮤니케이션팀을만들기로했습니다291
예제를통해map()함수를도출하기294
함수형도구:map()295
함수를전달하는세가지방법297
예제:모든고객의이메일주소298
예제를통해filter()함수도출하기301
함수형도구:filter()302
예제:아무것도구입하지않은고객303
예제를통해reduce()도출하기306
함수형도구:reduce()307
예제:문자열합치기308
reduce()로할수있는것들313
세가지함수형도구를비교하기315
결론316

CHAPTER13함수형도구체이닝317
고객커뮤니케이션팀은계속일하고있습니다318
체인을명확하게만들기1:단계에이름붙이기324
체인을명확하게만들기2:콜백에이름붙이기325
체인을명확하게만들기3:두방법을비교326
예제:한번만구매한고객의이메일목록327
반복문을함수형도구로리팩터링하기332
팁1:데이터만들기333
팁2:한번에전체배열을조작하기334
팁3:작은단계로나누기335
절차적코드와함수형코드비교337
체이닝팁요약338
체이닝디버깅을위한팁340
다양한함수형도구341
값을만들기위한reduce()345
데이터를사용해창의적으로만들기347
메서드연산자로정렬하기353
결론354

CHAPTER14중첩된데이터에함수형도구사용하기355
객체를다루기위한고차함수356
필드명을명시적으로만들기357
update()도출하기358
값을바꾸기위해update()사용하기359
리팩터링:조회하고변경하고설정하는것을update()로교체하기361
함수형도구:update()362
객체에있는값을시각화하기363
중첩된update시각화하기368
중첩된데이터에update()사용하기369
updateOption()도출하기370
update2()도출하기371
중첩된객체에쓸수있는update2()시각화하기372
incrementSizeByName()을만드는네가지방법374
update3()도출하기375
nestedUpdate()도출하기377
안전한재귀사용법382
nestedUpdate()시각화하기383
재귀함수가적합한이유384
깊이중첩된구조를설계할때생각할점386
깊이중첩된데이터에추상화벽사용하기387
앞에서배운고차함수들388
결론389

CHAPTER15타임라인격리하기391
버그가있습니다!392
두번빠르게클릭해봅시다393
타임라인다이어그램은시간에따라어떤일이일어나는지보여줍니다395
두가지타임라인다이어그램기본규칙396
자세히보면놓칠수있는액션순서에관한두가지사실400
add-to-cart타임라인그리기:단계1401
비동기호출은새로운타임라인으로그립니다402
서로다른언어,서로다른스레드모델403
한단계씩타임라인만들기404
add-to-cart타임라인그리기:단계2406
타임라인다이어그램으로순서대로실행되는코드에도두가지종류가있다는것을알수있습니다407
타임라인다이어그램으로동시에실행되는코드는순서를예측할수없다는것을알수있습니다408
좋은타임라인의원칙409
자바스크립트의단일스레드410
자바스크립트의비동기큐411
AJAX와이벤트큐412
완전한비동기예제413
타임라인단순화하기414
완성된타임라인읽기420
add-to-cart타임라인단순

출판사 서평

대상독자
■2~5년정도소프트웨어개발경험이있는현업종사자
■간단한시스템을만들고있지만큰시스템을다루는것에어려움을느끼는개발자