
Immutable.js 마스터 [변하지 않는 데이터를 활용한 자바스크립트 개발]
- 원서명Mastering Immutable.js: Better JavaScript development using immutable data (ISBN 9781788395113)
- 지은이아담 보두치(Adam Boduch)
- 옮긴이조경빈
- ISBN : 9791161753065
- 20,000원
- 2019년 05월 31일 펴냄 (절판)
- 페이퍼백 | 268쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 웹 프로페셔널
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
유일하게 Immutable.js를 제대로 다루고 있는 책으로 구성이 좋고 설명도 매우 친절하다. 많은 개발서가 독자의 눈높이를 맞추려고 시도하지만 실패하는 경우가 많은데 이 책은 기존 자바스크립트 개발자가 Immutable.js를 활용하는 데 필요한 모든 지식을 단계적으로 쉽게 설명하고 있다.
이 책에서 다루는 내용
■ Immutable.js를 사용해 자바스크립트 코드의 신뢰도를 높이는 방법
■ 불변 데이터를 생성 방법과 퍼시스턴트 체인지 사용 방법
■ 컬렉션 합성과 필터링 방법 그리고 아이템 탐색 방법
■ 시퀀스와 사이드이펙트를 다루는 방법
■ 컬렉션, 맵, 세트의 정렬 방법
■ 프로세싱 체인을 피하기 위한 기법
■ 리스트, 세트, 맵 간의 비교와 이동
■ 불변 패턴과 불변 아키텍처 사용
이 책의 대상 독자
불변성 개념을 활용해 자바스크립트 코드의 신뢰성과 성능을 향상시키고자 하는 사람을 대상으로 하며 기본적인 자바스크립트 지식은 갖추고 있다고 가정한다. 최소한 배열이나 오브젝트를 만들고 조작할 수는 있어야 하며 함수를 생성하고 호출할 수 있어야 한다.
이 책의 구성
1장, ‘왜 Immutable.js인가?’에서는 왜 Immutable.js를 사용하고자 하는지 설명한다.
2장, ‘불변 데이터 생성’에서는 불변 컬렉션 생성의 기초를 설명한다.
3장, ‘퍼시스턴트 체인지’에서는 기존 데이터를 변경하여 새 데이터를 만드는 방법을 다룬다.
4장, ‘컬렉션 필터링과 아이템 탐색’에서는 필요한 데이터를 찾는 방법을 설명한다.
5장, ‘시퀀스와 사이드이펙트 컬렉션’에서는 데이터를 사용하기 위해 컬렉션을 순회하는 방법을 설명한다.
6장, ‘컬렉션 정렬’에서는 제대로 된 순서를 얻는 방법을 다룬다.
7장, ‘매핑과 축소’에서는 컬렉션 데이터 변환의 기초를 설명한다.
8장, ‘지핑과 플래트닝’에서는 이터레이션 및 컬렉션 구조의 단순화를 설명한다.
9장, ‘퍼시스턴트 체인지 감지’에서는 퍼시스턴트 체인지 메서드가 실제로 데이터를 변경했는지 판단하는 방법을 설명한다.
10장, ‘세트 사용’에서는 고유한 컬렉션 값의 생성 방법을 설명한다.
11장, ‘컬렉션 비교’에서는 두 컬렉션 간의 관계를 파악하는 방법을 설명한다.
12장, ‘컬렉션 결합’에서는 컬렉션을 합쳐 새 컬렉션을 만드는 방법을 설명한다.
13장, ‘선언적 의사 결정’에서는 선언적 코드 작성을 돕기 위해 불변 컬렉션을 사용하는 방법을 설명한다.
14장, ‘유저 인터페이스’에서는 사이드이펙트, 불변 컬렉션을 사용한 렌더링 UI 컴포넌트를 설명한다.
15장, ‘Node.js에서의 사이드이펙트’에서는 IO 스트림을 사용해 컬렉션 데이터를 읽고 쓰는 방법을 설명한다.
16장, ‘불변 아키텍처 재사용’에서는 패턴의 형태로 만드는 방법을 설명한다.
목차
목차
- 1장. 왜 Immutable.js인가?
- 뮤테이션은 파괴적이다
- 오래된 데이터 삭제
- 심각한 버그 발생
- 퍼시스턴트 체인지
- Immutable.js 접근법
- 컬렉션 API
- 새 데이터를 반환하는 컬렉션 메서드
- 메서드 콜 연결
- 단방향 데이터 흐름
- 다른 방향의 존재
- 구독 만료
- 생성만 되는 데이터
- 수행이 어려운 묵시적 사이드이펙트
- Immutable.js와 유사한 라이브러리
- 무엇을 비교할 것인가?
- Lodash 추천
- 요약
- 뮤테이션은 파괴적이다
- 2장. 불변 데이터 생성
- Immutable.js 생성자
- Immutable.js 데이터 타입
- JavaScript 컬렉션 전달
- Immutable.js 컬렉션 전달
- of() 메서드의 사용
- Lists의 of값
- Maps의 of값
- Sets의 of값
- Sequences의 of값
- fromJS() 함수를 사용한 데이터 구문분석
- JavaScript 배열 구문분석
- JavaScript 오브젝트 구문분석
- 복잡한 구조 구문분석
- 요약
- Immutable.js 생성자
- 3장. 퍼시스턴트 체인지
- 컬렉션에 값 추가
- 리스트에 값 추가
- 맵에 키-값 쌍 추가
- 값 추가 메서드 연결
- 컬렉션값 변경
- 리스트값 변경
- 맵값 변경
- 컬렉션 뮤테이션 메서드 연결
- 컬렉션에서 값 제거
- 리스트에서 값 제거
- 맵에서 값 제거
- 컬렉션 제거 메서드 연결
- 컬렉션 비우기
- 새 인스턴스로 컬렉션 교체
- clear() 메서드 사용
- 변화 추적
- 요약
- 컬렉션에 값 추가
- 4장. 컬렉션 필터링과 아이템 탐색
- 간단한 비교를 사용한 필터링
- 정확한 일치
- 크기 비교 연산
- 부정 필터링
- 키를 사용한 맵 필터링
- 문자열 키 필터링
- 팬시 키 필터링
- 컬렉션값 찾기
- 값 존재 검사
- find()를 사용해서 값 얻기
- 딥 일치를 사용한 필터링
- is() 함수와 equals() 메서드 사용
- 맵의 리스트 탐색
- 부분 비교
- 맵의 형태
- 서브셋과 슈퍼셋
- 탐색 방향 변경
- 정렬된 컬렉션 탐색
- findLast()와 reduceRight() 사용
- 요약
- 간단한 비교를 사용한 필터링
- 5장. 시퀀스와 사이드이펙트
- 느긋한 평가를 써야 하는 이유
- 큰 컬렉션은 비싸다
- 불필요한 작업 제거
- 연결된 연산은 이해하기 쉽다
- 시퀀스 생성과 이터레이션
- 기본 시퀀스 생성
- 컬렉션을 시퀀스로 변환
- for...of 반복문을 사용한 순회
- forEach()를 사용한 순회
- 지연 필터링
- 기본 지연 필터링
- 다중 필터 레벨
- 결과 제한과 작업 축소
- take()를 사용한 결과 제한
- slice()를 사용한 페이지 처리
- 요약
- 느긋한 평가를 써야 하는 이유
- 6장. 컬렉션 정렬
- 정렬과 순서 뒤집기
- sort() 메서드
- reverse() 메서드
- 맵의 리스트 정렬
- sortBy() 메서드
- 다중 키 사용 정렬
- 오더드 맵
- 순서 보장
- 삽입 순서는 정렬 순서와 다름
- set()를 사용한 순서 설정
- 맵 정렬
- 오더드 맵 생성
- 키를 사용한 맵 정렬
- 정렬 순서 유지
- 삽입 인덱스 찾기
- 정말 필요한가?
- 요약
- 정렬과 순서 뒤집기
- 7장. 매핑과 축소
- 맵의 리스트 매핑
- 값 뽑아내기
- 새로운 값 계산
- 맵의 새 리스트에 매핑
- 새로운 키 생성
- 키 필터링
- 컬렉션 축소
- 필터링으로 충분하지 않은 상황
- 최솟값 및 최댓값 생성
- 값 누적
- 지연 매핑
- 다중 map() 호출
- 매핑 전 필터링
- 궁극적인 지연 패턴
- 요약
- 맵의 리스트 매핑
- 8장. 지핑과 플래트닝
- 컬렉션 지핑
- 과도한 순회 제거
- 간단한 값의 목록 지핑
- 맵의 리스트 지핑
- 지연 매핑
- 컬렉션 플래트닝
- 재귀 구조 피하기
- 중첩 리스트 딥 플래트닝
- 얕은 플래트닝 리스트
- 중첩 맵 평탄화
- 요약
- 컬렉션 지핑
- 9장. 퍼시스턴트 체인지 감지
- 컬렉션 동등성
- 엄격한 비교와 뮤터티브 메서드
- 엄격한 비교 vs 깊은 비교
- 트랜스포메이션과 뮤테이션 비교
- 트랜스포메이션은 항상 새 컬렉션을 반환함
- 트랜스포메이션 전 변화 감지
- 사이드이펙트 캐싱
- 요약
- 컬렉션 동등성
- 10장. 세트 사용
- 세트는 리스트가 아님
- get() 메서드 사용 금지
- 지정된 순회 순서 없음
- 키만 가진 맵
- 중복 제거
- 세트로 변환
- 세트 변환 후 다시 리스트로 복원
- 지연 중복 제거
- 오더드 세트
- 세트 정렬
- 세트 순회
- 세트 유지
- 고윳값 추가
- 중복값 추가
- 요약
- 세트는 리스트가 아님
- 11장. 컬렉션 비교
- 세트 인터섹션
- 인터섹션 찾기
- 오더드 인터섹션
- 리스트 인터섹션
- 리스트 인터섹션 줄이기
- 리스트 인터섹션 필터링
- 컬렉션 디퍼런스
- 세트 디퍼런스
- 리스트 디퍼런스
- 맵 비교
- 맵 인터섹션
- 맵 디퍼런스
- 서브셋과 슈퍼셋
- 리스트 서브셋
- 리스트 슈퍼셋
- 요약
- 세트 인터섹션
- 12장. 컬렉션 결합
- 맵 병합
- 키를 사용한 맵 병합
- 복잡한 키를 가진 맵 병합
- 리스트 병합
- 간단한 값 병합
- 맵의 리스트 병합
- 리스트의 리스트 병합
- 리스트와 시퀀스 연결
- 간단한 값 연결
- 지연 시퀀스 연결
- 덧붙이기와 끼워넣기
- 지연값 덧붙이기
- 지연값 끼워넣기
- 요약
- 맵 병합
- 13장. 선언적 의사 결정
- 매핑 동작
- 키는 논리적 경로, 값은 행동
- 함수에서 행동 맵 래핑
- 파라미터와 기본 동작
- 기본 동작 제공
- 매핑 동작 파라미터화
- 행동 작성
- 일반적인 상위 행동 함수
- 논리적 and/or 조건
- 복잡한 행동 조합
- 요약
- 매핑 동작
- 14장. 유저 인터페이스 사이드이펙트
- 간단한 애플리케이션
- 애플리케이션 데이터
- 필터 컨트롤
- 에피소드 결과
- DOM 사이드이펙트
- HTML 마크업
- 에피소드 필터링
- 이벤트 처리
- 렌더링 요소
- React 사이드이펙트
- 애플리케이션 상태
- 이벤트 처리와 상태 변경
- 에피소드와 엘리먼트 매핑
- 요약
- 간단한 애플리케이션
- 15장. Node.js에서의 사이드이펙트
- 컬렉션으로 데이터 읽기
- CSV 데이터를 읽고 구문분석
- 많은 양의 데이터 읽기
- 컬렉션 데이터 쓰기
- 컬렉션 순회하며 라인 쓰기
- 비동기 데이터와 시퀀스
- 지연 시퀀스와 스트림 연결
- 요약
- 컬렉션으로 데이터 읽기
- 16장. 불변 아키텍처
- 재사용 가능한 애플리케이션 상태 업데이터
- 초기 상태
- 사이드이펙트
- 상태 갱신 및 사이드이펙트 실행
- 초기 애플리케이션 상태
- 결과 상태
- 새 에피소드 상태 생성
- 이벤트와 상태 업데이터
- 검색 쿼리 업데이트
- 체크박스와 슬라이더 상태 업데이트
- 새 에피소드 데이터 업데이트
- 새 에피소드 생성
- 사이드이펙트 실행
- 에피소드 결과 출력
- 결과 수량 표시
- 새 에피소드 양식 초기화
- 재사용 가능한 애플리케이션 상태 업데이터