추천 검색어

최근 검색어

도서 IT전문서/IT입문서 프로그래밍/오픈소스
함수형 프로그래밍과 코틀린으로 실전 애플리케이션 개발하기 객체에서 함수로
정 가
38,000원
출 간
2024-12-20
지 은 이
우베르토 바르비니
옮 긴 이
오현석
I S B N
9791140712052
분 량
544쪽
난 이 도
초급,중급
부 록
소스 코드

실무에 가까운 웹 애플리케이션 프로젝트, 명확하고 간결한 실전 코틀린 코드로 도전하라.

실무에 가까운 웹 애플리케이션 프로젝트, 명확하고 간결한 실전 코틀린 코드로 도전하라.

함수형 사고 방식, 함수형 프로그래밍 방법 및 좋은 관행, 코틀린 프로젝트까지 한 권으로 집약했다!

 

 

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

 

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.2 HTML 페이지를 함수적으로 제공하기

____함수로서의 웹 서버

____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.5 DDT를 Pesticide로 변환하기

____시나리오

____액션과 프로토콜

____액터들

____단계

____Pesticide DDT로 전환하기

____애플리케이션 호출하기

____최종 테스트

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 할 일 목록 만들고 표시하기

____사용자 목록 페이지 만들기

____HTTP DDT로 전환

____도메인 전용 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 추가하기

____HTML UI에 버튼 추가하기

____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 파라미터가 두 개인 함수 변환

____사용자 입력 검증

____오류 수집

11.3 검증을 통한 유효성 검사

____오류를 사용자에게 반환하기

____비지역 반환 제거하기

11.4 애플리커티브 펑터 결합하기

____순회

____시퀀스

____성능에 대한 경고

____순차적 적용

____중위 표기법

____애플리커티브 법칙

____모나드와 애플리커티브

____커맨드를 처리하는 패턴

11.5 사용자 인터페이스 개선하기

____함수형 템플릿 엔진

____더 나은 검증 오류 표시

11.6 요약

11.7 연습 문제

____연습 문제 11.1: 결과 축소하기

____연습 문제 11.2: 애플리커티브 컨텍스트 리더

____연습 문제 11.3: 목록 항목 편집하기

____연습 문제 11.4: 목록 항목 삭제하기

 

 

12장 모니터링과 함수형 JSON

12.1 애플리케이션 모니터링하기

____클라우드 모니터링 플랫폼

____함수형 로깅

____전통적인 로깅

____페퍼다인의 로깅 법칙

____테스트 주도 로깅

____스트림에 로그 남기기

____더 자세한 오류

____함께 연결하기

____되돌아보기

12.2 구조화된 로깅

____LogEntry

____LogContext

____JsonLogger

____컨텍스트 전달하기

12.3 JSON을 함수형으로 만들기

____KondorJson 라이브러리

____JSON 변환기

____12.4 프로펑터 소개

____반공변 펑터

____프로펑터

12.5 데이터베이스 호출 로깅

12.6 요약

12.7 연습 문제

____연습 문제 12.1: 모니터링 개선

____연습 문제 12.2: Klaxon 제거하기

____연습 문제 12.3: 사용자가 항목 순서를 변경할 수 있게 하기

____연습 문제 12.4: 새로운 목록 상태 도입

 

 

13장 함수형 아키텍처 디자인하기

13.1 단순성 추구

____모듈과 하위 도메인

____모듈로 빌드하기

____함수형 모듈화

____공유된 데이터 구조

____동기적 프로토콜과 비동기적 프로토콜

13.2 전체 시스템 디자인하기

____제타이 예제 사용하기

____진화

____멀티 모듈 애플리케이션

13.3 코드로 변환하기

____모노리포

____지속적 빌드와 통합

____배포 단위

13.4 마지막 고려 사항

13.5 연습 문제

____연습 문제 13.1: 최종 연습 문제

 

 

부록 A 함수형 프로그래밍이란 무엇인가?

A.1 기원

____람다 계산법

____참조 투명성

____카테고리 이론

A.2 참조 투명성 달성하기

____함수를 순수하게 유지하라

____가변 타입을 신뢰하지 마라

____가능한 입력을 모두 고려하라

A.3 사상으로 생각하기

____함수를 데이터로 취급하라

____타입을 정확하게 정의하라

____선언형 스타일을 선호하라

____게으름을 피워라

A.4 요약

 

 

부록 B 함수형 코틀린에 대하여

B.1 코틀린 설정하기

____그레이들

____Hello World

____자동 변환기

B.2 코틀린 개론

____임시 변수

____함수

____함수 타입

____Unit

____Nothing

____람다 변수

____확장 함수

____새로운 함수 반환하기

____영역 함수

____클래스

____객체와 동반 객체

____데이터 클래스

____위임을 통한 구현

____위임 프로퍼티

____타입 별명

____내부 가시성

____when

____봉인된 클래스

____봉인된 인터페이스

____tailrec 키워드

____시퀀스

B.3 코틀린 타입 시스템 탐구

____널이 될 수 있는 타입

____중위 함수

____연산자

 

 

부록 C 약간의 이론

C.1 카테고리 이론

____집합과 함수

____카테고리란 무엇인가?

____빈 카테고리

____모노이드

____Set 카테고리

____컴퓨터 언어 카테고리

____부분 카테고리

____다이어그램

C.2 모든 것은 사상에 관한 것이다

____동형사상

____시작 대상과 끝 대상

____반대 카테고리

C.3 타입에 대한 타입

____곱 타입과 쌍대곱 타입

____지수 타입

C.4 펑터는 매퍼다

____딸림 펑터

____엔도펑터

____자연 변환

C.5 신비한 모나드

____쌍대모나드(코모나드)

____클라이슬리 카테고리

C.6 요네다로 모든 것 연결하기

____hom 펑터

____반공변 펑터

____요네다 보조정리

C.7 결론

 

 

부록 D 추가 자료

D.1 프로그래밍

____코틀린

____함수형 프로그래밍

____TDD

D.2 카테고리 이론

____책

____블로그

____비디오

 

 

찾아보기

 

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

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

필요한 자료를 선택하세요.

추천도서