객체지향의 기본 개념부터 시작해 객체지향 디자인을 포괄적으로 다룬다. 타입 힌트를 사용하는 방법, 클래스들 간의 다양한 관계를 활용해야 할 시기와 방법, 추상화 및 파이썬 데이터 구조를 통해 디자인을 단순화할 수 있는 기법, 빠르고 효율적인 파이썬의 내장 컬렉션을 다루는 이터레이터 패턴, 그리고 12가지 고급 디자인 패턴으로 견고한 애플리케이션을 개발하는 방법 등을 훌륭한 예제로 배울 수 있다. 또한 파이썬 애플리케이션을 자동화된 단위 테스트 모듈과 모의 객체를 사용해 쉽게 테스트할 수 있는 고급 테스트 기법도 배울 수 있다. 마지막으로 객체지향 디자인을 활용해 동시성 프로그래밍 기술을 사용하는 방법을 보여준다.
Contents
01장 객체지향 디자인
__객체지향 소개
__객체와 클래스
__속성과 동작 지정
____객체 상태를 설명하는 데이터
____동작은 행위이다
__정보 은닉과 공용 인터페이스 생성
__구성 관계
__상속
____추상화를 제공하는 상속
____다중 상속
__사례 연구
____문제 개요
____컨텍스트 뷰
____논리 뷰
____프로세스 뷰
____개발 뷰
____물리 뷰
____결론
__정리
__연습
__요약
02장 파이썬의 객체
__타입 힌트 소개
____타입 검사
__파이썬 클래스 생성
____속성 추가
____동작 추가
____객체 초기화
____타입 힌트와 기본 인수
____독스트링을 이용한 코드 설명
__모듈과 패키지
____모듈 조직화
____모듈 내에서의 코드 조직화
__데이터 액세스 제어
__써드파티 라이브러리
__사례 연구
____논리 뷰
____샘플과 그 상태
____샘플의 상태 전환
____클래스 책임
____TrainingData 클래스
__정리
__연습
__요약
03장 객체가 유사한 경우
__기본 상속
____내장 클래스 확장
____재정의와 super
__다중 상속
____다이아몬드 문제
____다양한 인수 집합
__다형성
__사례 연구
____논리 뷰
____또 다른 거리 계산법
__정리
__연습
__요약
04장 예상치 못한 상황을 예상하기
__예외 발생
____예외 발생시키기
____예외의 영향
____예외 처리
____예외 계층
____자체적인 예외 정의
____예외는 예외적인 것이 아니다
__사례 연구
____컨텍스트 뷰
____프로세스 뷰
____무엇이 잘못될 수 있는가?
____잘못된 동작
____CSV 파일로부터 샘플 만들기
____열거형 값 검증
____CSV 파일 읽기
____중복 배제
__정리
__연습
__요약
05장 객체지향 프로그래밍의 사용 시기
__객체를 객체로 다루기
__프로퍼티로 클래스 데이터에 동작 추가
____프로퍼티 자세히 보기
____데코레이터 - 프로퍼티를 만드는 또 다른 방법
____프로퍼티를 사용해야 할 때
__관리자 객체
____중복 코드 제거
____실전
__사례 연구
____입력 데이터 검증
____입력 데이터 분할
____Sample 클래스 계층
____purpose 열거
____프로퍼티 세터
____반복되는 if 문
__정리
__연습
__요약
06장 추상 기본 클래스와 연산자 오버로딩
__추상 기본 클래스 만들기
____collections의 ABC
____추상 기본 클래스와 타입 힌트
____collections.abc 모듈
____자체적인 추상 기본 클래스 만들기
____마법 파헤치기
__연산자 오버로딩
__내장 컬렉션 확장
__메타클래스
__사례 연구
____두 개의 하위 리스트로 리스트 클래스 확장
____분할을 위한 셔플링 전략
____분할을 위한 증분 전략
__정리
__연습
__요약
07장 파이썬 데이터 구조
__빈 객체
__튜플과 명명된 튜플
____typing.NamedTuple을 사용한 명명된 튜플
__데이터클래스
__딕셔너리
____딕셔너리 유스 케이스
____defaultdict 사용
__리스트
____리스트 정렬
__집합
__세 가지 타입의 큐
__사례 연구
____논리 모델
____고정된 데이터클래스
____NamedTuple 클래스
____결론
__정리
__연습
__요약
08장 객체지향과 함수형 프로그래밍의 교차점
__파이썬 내장 함수
____len() 함수
____reversed() 함수
____enumerate() 함수
__메서드 오버로딩의 대안
____매개변수의 기본값
____가변 인수 리스트
____인수 언패킹
__함수도 객체다
____함수 객체와 콜백
____함수를 사용한 클래스 패치
____호출 가능한 객체
__파일 입출력
____컨텍스트에 배치
__사례 연구
____프로세스 개요
____데이터 분할
____분류 재고찰
____partition() 함수
____한 번에 분할하기
__정리
__연습
__요약
09장 문자열, 직렬화, 파일 경로
__문자열
____문자열 조작
____문자열 포맷팅
____문자열은 유니코드이다
__정규표현식
____패턴 매칭
__정규표현식으로 정보 파싱
__파일시스템 경로
__객체 직렬화
____사용자 정의 피클
____JSON을 사용한 객체 직렬화
__사례 연구
____CSV 포맷 디자인
____CSV 딕셔너리 리더
____CSV 리스트 리더
____JSON 직렬화
____줄바꿈으로 구분된 JSON
____JSON 유효성 검사
__정리
__연습
__요약
10장 이터레이터 패턴
__디자인 패턴이란
__이터레이터
____이터레이터 프로토콜
__컴프리헨션
____리스트 컴프리헨션
____집합 및 딕셔너리 컴프리헨션
____제너레이터 표현식
__제너레이터 함수
____다른 이터러블로부터 항목 산출
____제너레이터 스택
__사례 연구
____집합 빌더에 대한 배경지식
____다중 분할
____테스트
____k-NN 필수 알고리듬
____bisect 모듈을 사용하는 k-NN
____heapq 모듈을 사용하는 k-NN
__결론
__정리
__연습
__요약
__왜 테스트를 해야 하는가
____테스트 주도 개발
____테스트 목표
____테스트 패턴
__unittest로 단위 테스트하기
__pytest로 단위 테스트하기
____pytest의 설정 및 해제 기능
____설정 및 해제를 위한 pytest 픽스쳐
____더 정교한 픽스쳐
__pytest에서 테스트 건너뛰기
__Mock을 사용한 객체 모방
____추가 패치 기법
____센티넬 객체
__얼마나 해야 충분한 테스트인가?
__테스트와 개발
__사례 연구
____거리 계산 알고리듬 단위 테스트
____Hyperparameter 클래스 단위 테스트
__정리
__연습
__요약
14장 동시성
__동시 처리에 대한 배경지식
__스레드
____스레드의 많은 문제
__멀티프로세싱
____멀티프로세싱 풀
____큐
____멀티프로세싱의 문제점
__Futures
__AsyncIO
____AsyncIO 실전
____AsyncIO future 읽기
____네트워킹을 위한 AsyncIO
____로그 작성 데모
____AsyncIO 클라이언트
__식사하는 철학자들 벤치마크
__사례 연구
__정리
__연습
__요약
Author
스티븐 로트,더스티 필립스,김우현
컴퓨터가 크고 비싸며 드물던 70년대부터 프로그래밍을 시작했으며, 프리랜서 소프트웨어 개발자 및 아키텍트로서 다양한 규모의 수많은 프로젝트를 수행했다. 10년 이상 비즈니스 문제를 해결하기 위해 파이썬을 사용해왔다. 현재 파이썬을 활용해 마이크로서비스와 ETL 파이프라인을 구현하고 있으며, 『객체지향 파이썬 프로그래밍』(에이콘, 2017), 『함수형 파이썬 프로그래밍』(에이콘, 2017), 『유쾌한 파이썬』(에이콘, 2015), 『Python Essentials』(packt, 2015) 등을 저술했다.
컴퓨터가 크고 비싸며 드물던 70년대부터 프로그래밍을 시작했으며, 프리랜서 소프트웨어 개발자 및 아키텍트로서 다양한 규모의 수많은 프로젝트를 수행했다. 10년 이상 비즈니스 문제를 해결하기 위해 파이썬을 사용해왔다. 현재 파이썬을 활용해 마이크로서비스와 ETL 파이프라인을 구현하고 있으며, 『객체지향 파이썬 프로그래밍』(에이콘, 2017), 『함수형 파이썬 프로그래밍』(에이콘, 2017), 『유쾌한 파이썬』(에이콘, 2015), 『Python Essentials』(packt, 2015) 등을 저술했다.