[epub3.0] 객체에서 함수로
2025년 01월 08일 출간
국내도서 : 2024년 12월 20일 출간
- eBook 상품 정보
- 파일 정보 ePUB (34.23MB)
- ISBN 9791140712434
- 지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
-
교보eBook App
듣기(TTS) 가능
TTS 란?텍스트를 음성으로 읽어주는 기술입니다.
- 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를 읽을 수 있습니다.
- 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
쿠폰적용가 27,360원
10% 할인 | 5%P 적립이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.
카드&결제 혜택
- 5만원 이상 구매 시 추가 2,000P
- 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
- 리뷰 작성 시, e교환권 추가 최대 200원
작품소개
이 상품이 속한 분야
함수형 사고 방식, 함수형 프로그래밍 방법 및 좋은 관행, 코틀린 프로젝트까지 한 권으로 집약했다!
이 책은 애플리케이션을 밑바닥부터 최종 완료할 때까지 완성해나가는 모습을 단계별로 보여준다. 이렇게 구성한 이유는 첫째, 개발 과정 전체에 함수형 접근 방식을 어떻게 적용하는지 더 넓은 관점에서 보여주기 위해서다. 둘째, 직접 만들어봐야 실제 함수형 프로그래밍을 제대로 배울 수 있기 때문이다. 이 책의 프로젝트는 테스트, 도메인 탐색, 함수형 프로그래밍을 사용해 견고하고 유연한 소프트웨어를 빠르게 구축하는 것이 목표다. 애플리케이션 개발의 전 과정을 함수형 디자인에 따라 점진적으로 진행하면서 모나드, 애플리커티브, 프로펑터 같은 고급 개념도 자연스럽게 다룰 것이다. 이 책의 개념과 의도를 완전히 이해하려면 직접 손을 움직여 코드를 공부하고 연습 문제를 풀어야 한다. 함수형 프로그래밍은 그냥 코드를 읽는 것만으로는 배울 수 없다. 가장 좋은 방법은 연습하는 것이다. 매 장마다 제시한 연습 문제들도 깃허브에서 힌트를 제공하고 있으니 지나치지 말고 도전해보자.
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)에서 비디오 게임을 처음 만들면서 프로그래밍을 시작했다. 아주 큰 회사부터 아주 작은 회사에 이르기까지 다양한 조직에서 일하면서 팀이 효율적이고 지속가능한 방식으로 소프트웨어를 구축해 회사에 가치를 창출하도록 코치하는 일을 해 왔다. 다양한 함수형 언어(하스켈, 클로저, 스칼라)를 사용했고 현재는 코틀린의 단순함과 생산성에 푹 빠져 있다. 전 세계에서 열리는 코틀린과 자바 컨퍼런스에 강사로 자주 참가하며, 젊은 프로그래머들의 멘토가 되는 것을 즐긴다./모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 『코틀린 함수형 프로그래밍』(에이콘, 2023) 등 코틀린 서적을 여러 권 번역했고, 코틀린 외에도 『실전 파이썬 핸즈온 프로젝트』(책만, 2022), 『읽고 나면 진짜 쉬워지는 자료 구조』(길벗, 2024) 등 다양한 프로그래밍 언어와 프로그래밍 기술에 대한 책을 번역했으며, 『핵심 코틀린 프로그래밍』(에이콘, 2023) 책을 쓴 저자이기도 하다.
이 상품의 총서
Klover리뷰 (0)
- - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
- - 리워드는 한 상품에 최초 1회만 제공됩니다.
- - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
구매 후 리뷰 작성 시, e교환권 100원 적립
문장수집
- 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
- e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
- 리워드는 한 상품에 최초 1회만 제공됩니다.
- sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.
구매 후 문장수집 작성 시, e교환권 100원 적립
신규가입 혜택 지급이 완료 되었습니다.
바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!
- 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
- 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
- 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
가장 와 닿는 하나의 키워드를 선택해주세요.
총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.
신고 사유를 선택해주세요.
신고 내용은 이용약관 및 정책에 의해 처리됩니다.
허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
있으니 유의하시어 신중하게 신고해주세요.
이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.
구매 후 90일 이내 작성 시, e교환권 100원 적립
eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.
차감하실 sam이용권을 선택하세요.
차감하실 sam이용권을 선택하세요.
선물하실 sam이용권을 선택하세요.
-
보유 권수 / 선물할 권수0권 / 1권
-
받는사람 이름받는사람 휴대전화
- 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
- 열람권은 1인당 1권씩 선물 가능합니다.
- 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
- 선물한 열람권의 등록유효기간은 14일 입니다.
(상대방이 기한내에 등록하지 않을 경우 소멸됩니다.) - 무제한 이용권일 경우 열람권 선물이 불가합니다.
첫 구매 시 교보e캐시 지급해 드립니다.
- 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
- 한 ID당 최초 1회 지급 / sam 이용권 제외
- 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
- 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)