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

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

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

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

우베르토바르비니

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

목차

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장은여러서비스를아우르는완전한소프트웨어아키텍처를함수형접근방식을사용해디자인하고구축하는방법에관해설명했다.이책을통해함수형개념을점진적으로도입하는방법은물론,고급개념을사용해보면서실제로도움이되는효과적인코딩방법을배워보자!


[지은이서문]
이책의핵심목표는일상업무에서함수형사고를쉽게배우고사용할수있는방법을보여주는것이다.함수형프로그래밍자체가궁극적인목표가아니라견고하고적응가능한소프트웨어를빠르게구축하는것이목표이며,이를달성하는가장좋은도구는테스트및도메인탐색,함수형프로그래밍이라고믿는다.그럼에도함수형프로그래밍자체만을추구하지는않는다.부분적인함수형해법이순수함수형해법보다더나은성능을발휘한다면,나는주저하지않고전자를제안할것이다.코틀린을몰라도자바,C#등의유사한언어를알고있다면충분하다.이책은중고급프로그래머를대상으로한다.
•객체지향프로그래밍에탄탄한배경지식을가진숙련된개발자로,함수형프로그래밍과이점에대해더알고싶은개발자
•고전적인교과서예제를전체애플리케이션으로변환하는데어려움을겪는함수형프로그래밍초보자
•함수형프로그래밍에능숙하며코틀린에관심이있는프로그래머


[옮긴이서문]
현재는함수형프로그래밍의장점에대해많은사람들이동의하고있다.상태가없는순수함수를파라미터로받는여러고차함수를사용해컬렉션을조작하는스타일의코딩은이제객체지향개발자들이사용하는컬렉션라이브러리에도깊이침투해있고,리액트나컴포즈등의UI프레임워크는함수컴포넌트를통해상태관리와UI구성을분리함으로써좀더깔끔한관심사의분리를지원한다.
그럼에도불구하고실무에서함수형프로그래밍을적용할때는컬렉션처리나함수안에한정된로직등의작은단위에함수형프로그래밍방식을적용하고,커다란단위에서는객체지향프로그래밍등을사용해프로젝트를진행하는경우가많다.하지만상태를사용하는참조투명하지않은코드인액션은전염성이있기때문에프로그램에서액션과계산,데이터를잘분리하지않으면액션이전파되면서전체프로그램이함수형프로그래밍과는거리가먼,상태관리를중심으로하는프로그램이되기쉽다.복잡하고커다란프로젝트에서는데이터베이스등의상태관리가필수적인데,대부분의개발자는전통적인객체지향방식에익숙하고큰시스템에서좀더함수적으로액션과계산을분리해프로그램을깔끔하게작성하는방법을잘모르는경우가많다.이책이많은개발자들이프로젝트를더깔끔하게설계하고유지하는데도움이되길빈다.