객체에서 함수로 : 함수형 프로그래밍과 코틀린으로 실전 애플리케이션 개발하기

객체에서 함수로 : 함수형 프로그래밍과 코틀린으로 실전 애플리케이션 개발하기

$38.00
Description
실무에 가까운 웹 애플리케이션 프로젝트, 명확하고 간결한 실전 코틀린 코드로 도전하라.
함수형 사고 방식, 함수형 프로그래밍 방법 및 좋은 관행, 코틀린 프로젝트까지 한 권으로 집약했다!

이 책은 애플리케이션을 밑바닥부터 최종 완료할 때까지 완성해나가는 모습을 단계별로 보여준다. 이렇게 구성한 이유는 첫째, 개발 과정 전체에 함수형 접근 방식을 어떻게 적용하는지 더 넓은 관점에서 보여주기 위해서다. 둘째, 직접 만들어봐야 실제 함수형 프로그래밍을 제대로 배울 수 있기 때문이다. 이 책의 프로젝트는 테스트, 도메인 탐색, 함수형 프로그래밍을 사용해 견고하고 유연한 소프트웨어를 빠르게 구축하는 것이 목표다. 애플리케이션 개발의 전 과정을 함수형 디자인에 따라 점진적으로 진행하면서 모나드, 애플리커티브, 프로펑터 같은 고급 개념도 자연스럽게 다룰 것이다. 이 책의 개념과 의도를 완전히 이해하려면 직접 손을 움직여 코드를 공부하고 연습 문제를 풀어야 한다. 함수형 프로그래밍은 그냥 코드를 읽는 것만으로는 배울 수 없다. 가장 좋은 방법은 연습하는 것이다. 매 장마다 제시한 연습 문제들도 깃허브에서 힌트를 제공하고 있으니 지나치지 말고 도전해보자.

저자

우베르토바르비니

저자:우베르토바르비니
열정넘치는프로그래머로,오래전Zx스펙트럼(ZxSpectrum,싱클레어리서치가영국에출시한8비트PC)에서비디오게임을처음만들면서프로그래밍을시작했다.아주큰회사부터아주작은회사에이르기까지다양한조직에서일하면서팀이효율적이고지속가능한방식으로소프트웨어를구축해회사에가치를창출하도록코치하는일을해왔다.다양한함수형언어(하스켈,클로저,스칼라)를사용했고현재는코틀린의단순함과생산성에푹빠져있다.전세계에서열리는코틀린과자바컨퍼런스에강사로자주참가하며,젊은프로그래머들의멘토가되는것을즐긴다.

역자:오현석
모빌리티42이사로일하면서매일고객의요청에따라코드를만드는현업개발자다.『코틀린함수형프로그래밍』(에이콘,2023)등코틀린서적을여러권번역했고,코틀린외에도『실전파이썬핸즈온프로젝트』(책만,2022),『읽고나면진짜쉬워지는자료구조』(길벗,2024)등다양한프로그래밍언어와프로그래밍기술에대한책을번역했으며,『핵심코틀린프로그래밍』(에이콘,2023)책을쓴저자이기도하다.

목차

0장왜함수형프로그래밍인가?
0.1왜코틀린인가?
0.2함수형프로그래밍의진정한의미는무엇인가?
____재사용은정말과대평가된것인가?
0.3객체지향프로그래밍지식을일부러잊어버리기
____대상과동작에집중하기보다데이터변환에집중하기
____메서드없는객체생성하기
____불필요한인터페이스피하기
____복잡한제네릭타입을두려워하지말자
0.4요약

1장애플리케이션준비하기
1.1예제애플리케이션정의하기
____새제품상상해보기
1.2제타이:혁신적인할일목록애플리케이션
____사용자스토리정의하기
____이벤트스토밍을통해스토리검증하기
____목업준비하기
____요구사항을코드로작성하기
1.3테스트가개발을안내하게하라
____지속가능한페이스로생각하기
____디자인방향을이끌기
____올바름보장하기
____여러가지유형의테스트들
____테스트에대한두가지학파
1.4프로젝트설정하기
____테스트라이브러리
1.5단위테스트를함수형으로만들기
____첫번째단위테스트
____목을사용하지말라
1.6요약
1.7연습문제
____연습문제1.1:슈퍼마켓이벤트스토밍
____연습문제1.2:TDD로할인금액계산하기
____연습문제1.3:1씩더해가는테스트

2장함수로HTTP다루기
2.1프로젝트시작하기
____작동하는골격
2.2HTML페이지를함수적으로제공하기
____함수로서의웹서버
____Http4k소개
____스파이크:첫번째웹페이지
____Http4k도메인특화언어
____위험관리
2.3제타이시작하기
____첫번째인수테스트
____유비쿼터스언어
____인수테스트실행
2.4화살표로디자인하기
____여러함수결합하기
2.5맵으로부터목록제공하기
____응답파싱하기
____스토리완성하기
2.6요약
2.7연습문제
____연습문제2.1:함수연쇄호출
____연습문제2.2:함수형스택
____연습문제2.3:RPN계산기

3장도메인정의및테스트
3.1인수테스트개선하기
____부정적사례테스트
____시나리오액터
____애플리케이션파사드
____함수로표현한단계
3.2고차함수사용하기
____순수고차함수
3.3인프라에서도메인분리하기
____허브
____허브를제타이에연결하기
3.4도메인에서테스트구동하기
____프로토콜
____인수테스트를DDT로전환하기
3.5DDT를Pesticide로변환하기
____시나리오
____액션과프로토콜
____액터들
____단계
____PesticideDDT로전환하기
____애플리케이션호출하기
____최종테스트
3.6요약
3.7연습문제
____연습문제3.1:계산원DDT
____연습문제3.2:할인DDT
____연습문제3.3:결과로함수반환하기
____연습문제3.4:템플릿엔진

4장도메인과어댑터모델링하기
4.1목록을수정하는새스토리시작하기
____진행중인작업
____도메인주도테스트과정
____액터단계
____HTTP액션호출
____다른페이지처리하기
____CRUD예제
____항목을추가하는경로
4.2함수적의존관계주입사용하기
____객체지향의존관계주입과의비교
____부분적용
____허브에항목추가하기
____호출가능한클래스로서의함수
____허브밖에목록저장하기
____음성(부정적인경우)검사하기
____목록에항목추가하기
4.3함수형코드디버깅하기
____의심이된다면출력하라
4.4함수형도메인모델링
____낮은카디널리티
____오류를나타내도록널반환하기
____널의문제
____속성테스트
____타입안의널이될수있는필드
____더나은HTML
____HTML파싱하기
____고차함수추출
4.5요약
4.6연습문제
____연습문제4.1:DiscardUnless
____연습문제4.2:널이될수있는함수연쇄호출하기
____연습문제4.3:커링
____연습문제4.4:호출가능객체

5장이벤트를사용해상태수정하기
5.1할일목록만들고표시하기
____사용자목록페이지만들기
____HTTPDDT로전환
____도메인전용DDT통과시키기
____사용자의할일목록페이지생성하기
5.2변경된상태저장하기
____이벤트소싱
____불변데이터로상태변경하기
____임시가변성
____변경가능한지역변수제거하기
5.3재귀의힘활용하기
____접을수있게만들기
____왼쪽접기와오른쪽접기
5.4이벤트접기
____유한상태기계구현하기
____유니언타입
____복합타입의카디널리티계산하기
____상태변경정의하기
5.5모노이드알아보기
5.6요약
5.7연습문제
____연습문제5.1:재귀
____연습문제5.2:접기
____연습문제5.3:유니언타입
____연습문제5.4:모노이드

6장커맨드실행해서이벤트생성하기
6.1새목록만들기
____새목록을만드는DDT추가하기
____HTMLUI에버튼추가하기
____HTTP핸들러에경로추가하기
6.2커맨드를사용해상태변경하기
____커맨드에서이벤트생성하기
6.3상태와이벤트로도메인모델링하기
____트랜잭션엔티티
____엔티티상태
____ToDoListEvent
____ToDoListState
6.4함수형상태기계작성하기
____이벤트스토어
6.5허브연결하기
____읽기모델
____목록에항목추가하기
6.6커맨드와이벤트더잘이해하기
____변경가능한상태와변경불가능한상태
____정체성과엔티티
____이벤트소싱애플리케이션지원
6.7요약
6.8연습문제
____연습문제6.1:엘리베이터를상태기계로모델링하기
____연습문제6.2:이벤트를사용해엘리베이터상태유지하기
____연습문제6.3:고장상태추가하기

7장함수형으로오류처리하기
7.1오류를더잘처리하기
____널로오류처리하기
____오류반환하기
____예외를예외적으로유지하기
____함수형오류처리
7.2펑터와카테고리배우기
____코드에서카테고리정의하기
7.3코드에서펑터정의하기
____제네릭스는타입빌더다
____변환과리프트
____펑터의법칙
____펑터로리스트살펴보기
7.4펑터를사용해오류처리하기
____유니언타입으로오류처리하기
7.5결과다루기
____실패시끝내기
____더정확한오류
____함수적효과
____코드정리하기
____결과테스트하기
7.6요약
7.7연습문제
____연습문제7.1:펑터합성하기
____연습문제7.2:펑터법칙검증하기
____연습문제7.3:실패변환하기
____연습문제7.4:예외잡아내기

8장펑터를사용해이벤트투영하기
8.1이벤트투영하기
____첫번째투영정의하기
____행다루기
____맵에서이벤트투영하기
____첫번째투영
____투영질의하기
8.2펑터에서질의실행하기
____지연계산활용하기
____결과를하나로합치기
____fetcher제거하기
8.3펑터관점에서생각하기
____‘다음에할일’페이지만들기
8.4커맨드와질의책임분리(CQRS)
8.5요약
8.6연습문제
____연습문제8.1:지연계산
____연습문제8.2:상태가있는함수
____연습문제8.3:엘리베이터투영

9장모나드를사용해데이터를안전하게영속화하기
9.1안전하게영속화하기
____데이터베이스의종류
____PostgreSQL과통합테스트하기
9.2코틀린으로데이터베이스에연결하기
____이벤트스토어용테이블스키마
____이벤트를JSON으로변환하기
____투영을위한테이블스키마
____데이터베이스준비
____효과와부수효과
____테이블에읽고쓰기
____Exposed확장프로그램
9.3함수형방식으로원격데이터에접근하기
____컨텍스트리더
____데이터베이스에투영저장하기
9.4모나드의힘살펴보기
____엔도펑터
____모나드란무엇인가?
____모나드가아닌것
____모나드법칙
____Outcome모나드
____리더모나드
____타입클래스와인터페이스
____모나드에대한마지막한마디
9.5요약
9.6연습문제
____연습문제9.1:ContextReader에대한모나드법칙
____연습문제9.2:join을가지고bind구현하기

10장커맨드처리를위해컨텍스트읽기
10.1모나드로데이터베이스에접근하기
____EventStreamer와ContextReader
____인메모리이벤트스트리머다시작성하기
____데이터베이스에저장된이벤트스트림
10.2컨텍스트리더를사용해커맨드처리하기
____모나드변환기
____커맨드를동시에실행하기
____모두함께엮기
10.3데이터베이스에서투영질의하기
____투영영속화
____데이터베이스에서투영갱신
____unaryPlus연산자를사용한DSL
____SQL로질의작성하기
____질의핸들러작성하기
10.4이벤트소싱을통한도메인모델링
____상태기계정의하기
____이벤트마이그레이션과버전관리
10.5요약
10.6연습문제
____연습문제10.1:로거모나드
____연습문제10.2:콘솔모나드
____연습문제10.3:콘솔모나드RPN계산기

11장애플리커티브로데이터검증하기
11.1목록이름변경하기
____목록이름변경커맨드
____목록이름변경이벤트
____이름변경이벤트투영하기
____잘못된이름변경오류
____DDT통과시키기
11.2파라미터가두개인함수변환
____사용자입

출판사 서평

객체지향에서함수형으로!
더빠르고안전하게,적은코드로더나은결과를얻어라!

객체지향에함수형프로그래밍을더하라!
객체지향프로그래밍지식이탄탄하고기술적으로도숙련된개발자가함수형프로그래밍을배우는것은뇌를다시배선하는것과같다.결코쉽지않은,어려운작업이지만보상은매우크다.더적은노력으로더나은코드를작성할수있기때문이다.

함수형프로그래밍을더한다면코틀린으로하라!
함수형프로그래밍과객체지향프로그래밍의장점을함께누릴수있는언어가있다.바로코틀린이다.배우기쉽고,간결하고안전하며,자바와상호운용하거나자바라이브러리와통합하기도쉽다.또한코틀린타입시스템은자바타입시스템보다함수형프로그래밍에더친화적이며,생산성도매우높다.혹시코틀린을모른다면이책을통해코틀린도배우자.자바나C#같은언어를알고있다면수월하게코틀린을배울수있다.

목표는함수형+코틀린으로더나은소프트웨어를작성하는것이다!
이책은1장부터12장까지함수형디자인을따라애플리케이션을점진적으로구축하는방법을보여준다.점진적으로진행하지만,애플리케이션을구축하면서모나드,애플리커티브,프로펑터같은고급개념도다룰것이다.각장을순서대로읽으면완전한애플리케이션을구축하는과정을잘이해할수있도록구성했다.마지막13장은여러서비스를아우르는완전한소프트웨어아키텍처를함수형접근방식을사용해디자인하고구축하는방법에관해설명했다.이책을통해함수형개념을점진적으로도입하는방법은물론,고급개념을사용해보면서실제로도움이되는효과적인코딩방법을배워보자!

[베타테스터후기]
이책을제대로이해하려면한번만읽어서는안됩니다.한번쯤함수형프로그래밍을해보고싶다는생각을했다면진지한자세로책을끝까지읽어야합니다.그저단순한웹서비스를만드는것임에도TDD를필두로,코틀린의온갖문법적기능과함께함수형프로그래밍은이렇게하는것이라고친절하게설명합니다.
윤병조_소프트웨어개발자,동영상서버개발

함수형프로그래밍을실무에적용하려는개발자들에게매우유용하리라생각합니다.체계적인구성과실질적인예제,풍부한부록을통해함수형프로그래밍의진가를제대로느낄수있었습니다.
이석곤_(주)아이알컴퍼니,14년차AI/빅데이터개발자

코틀린을이용해기존객체지향언어로도함수형패러다임을구현할수있다는자신감을심어줍니다.구현체에대해정말줄단위로설명을해주므로,실습없이는보기힘든책입니다.꼭컴퓨터와함께읽으세요!
시한_고려대보안석사과정,백엔드개발자

함수형프로그래밍을위해반드시새로운언어를배워야하는건아니라고하는점이좋았습니다.특히코틀린에대해서초급부터중급을넘어고급까지성장할수있는좋은책입니다.
이종우_페이민트,CTO

코틀린의객체가아닌함수를이용해개발하니더욱간편하게작업할수있다는것을알게되어너무좋았습니다.특히목(mock)을이용해테스트를하는방법에서기존에테스트코드의유지보수성에대해서생각하고있던찰나이글을읽으니해답을얻은듯했습니다.
최윤정_안드로이드개발취업준비생

기존에객체지향프로그래밍을통해다년간개발을해오던개발자에게함수형프로그래밍관점에서문제를바라보고어떤식으로해결할수있는지구체적인예시를통해알려주어함수형에입문하고,실제업무에적용해보는데도움이되는책입니다.
김건_5년차백엔드개발자

실무개발자에게꼭필요한개념과실질적인예제를통해깊이있는학습을제공하는훌륭한책입니다.예제를여러장에걸쳐만들고,단순히코드만나열하는것이아니라,실제로동작하는프로그램을단계적으로완성해가는과정이좋았습니다.
곤_스타트업,백엔드개발자