0장. 준비__카지노 블랙잭____게임 시작____블랙잭 플레이어 전략____블랙잭 시뮬레이션의 객체 디자인__성능 측정: timeit 모듈__테스트: unittest와 doctest____단위 테스트와 기술 스파이크__문서화 문자열: RST 마크업과 설명서 도구__IDE 선택__스페셜 메소드명__요약1부, 스페셜 메소드를 통한 파이썬다운 클래스1장. __init__() 메소드__내포된 최상위 클래스: object__기반 클래스 객체 __init()__ 메소드__최상위 클래스에서 __init__() 구현__ __init__() 으로 매니페스트 상수 생성__팩토리 함수로 __init__() 활용____불완전한 팩토리 디자인과 모호한 else절____elif 시퀀스를 이용한 단순화와 일관성____매핑과 클래스 객체를 이용한 단순화________두 병렬 매핑________튜플 값에 매핑________부분 함수 방식________팩토리용 플루언트 API__각 하위 클래스에서 __init__() 구현__단순 복합 객체____컬렉션 클래스 래핑____컬렉션 클래스 확장____추가적인 요구 사항과 또 다른 디자인__복잡한 복합 객체____복합 객체 초기화__ __init()__이 필요 없는 상태가 없는 객체__추가 클래스 정의__다중 전략 __init__()____좀 더 복잡한 초기화 방법____정적 메소드 초기화__기타 __init__() 기법____타입 검사를 포함하는 초기화____초기화, 캡슐화, 프라이버시__요약2장. 파이썬과 매끄러운 통합: 기초 스페셜 메소드__repr__()과 __str__() 메소드____컬렉션이 아닌 __str__()과 __repr__()____컬렉션의 __str__()과 __repr__()__ __format__() 메소드____중첩 포맷 명세____컬렉션과 포맷 명세 위임__ __hash__() 메소드____해시 선택____불변 객체의 정의 상속____불변 객체 정의 오버라이딩____가변 객체 정의 오버라이딩____가변 핸드로부터 불변 핸드 생성__ __bool__() 메소드__ __bytes__() 메소드__비교 연산자 메소드____비교 연산 디자인____같은 클래스의 객체 비교 구현____서로 다른 클래스의 객체 비교 구현____하드 점수와 소프트 점수, 다형성____서로 다른 클래스 비교 예제__ __del__() 메소드____참조 계수와 소멸____순환 참조와 가비지 컬렉션____순환 참조와 weakref 모듈______del__()과 close() 메소드__ __new__() 메소드와 불변 객체__ __new__() 메소드와 메타클래스____메타클래스 예제 1: 속성 정렬____메타클래스 예제 2: 자기 참조__요약3장. 속성 접근과 프로퍼티, 디스크립터__기본 속성 처리____속성과 __init__() 메소드__프로퍼티 생성____즉시 계산 속성____세터와 딜리터 프로퍼티__스페셜 메소드로 속성 접근______slots__을 포함하는 불변 객체 생성____튜플 하위 클래스로서 불변 객체 생성____즉시 계산 속성__ __getattribute__() 메소드__디스크립터 생성____비데이터 디스크립터 사용____데이터 디스크립터 사용__요약, 디자인 고려 사항, 트레이드오프____프로퍼티와 속성____디스크립터로 디자인____예고4장. 일관적인 디자인의 ABC__추상 기반 클래스__기반 클래스와 다형성__콜러블__컨테이너와 컬렉션__수__기타 추상화____반복자 추상화____컨텍스트와 컨텍스트 매니저__abc 모듈__요약, 디자인 고려 사항, 트레이드오프____예고5장. 콜러블과 컨텍스트 사용__ABC 콜러블로 디자인__성능 향상____메모이제이션이나 캐싱 사용__functools를 사용한 메모이제이션____콜러블 API로 단순성 추구__복잡도와 콜러블 API__컨텍스트 관리와 with문____십진 컨텍스트 사용____기타 컨텍스트__ __enter__()와 __exit__() 메소드 정의____예외 처리__팩토리로서의 컨텍스트 매니저____컨텍스트 매니저 삭제__요약____콜러블의 디자인 고려 사항과 트레이드오프____컨텍스트 매니저의 디자인 고려 사항과 트레이드오프____예고6장. 컨테이너와 컬렉션 생성__컬렉션의 추상 기반 클래스__스페셜 메소드 예제__표준 라이브러리 확장 사용____namedtuple() 함수____deque 클래스____ChainMap 유스케이스____OrderedDict 컬렉션____defaultdict 하위 클래스____Counter 컬렉션__새로운 종류의 컬렉션 생성__새로운 종류의 시퀀스 정의____통계 리스트____즉시 계산과 지연 계산______getitem__(), __setitem__(), __delitem__(), 슬라이스 이용______getitem__(), __setitem__(), __delitem__() 구현____리스트 래핑과 위임______iter__()로 반복자 생성__새로운 종류의 매핑 생성__새로운 종류의 집합 생성____디자인 원리____Tree 클래스 정의____TreeNode 클래스 정의____이진 트리 집합 실험__요약____디자인 고려 사항과 트레이드오프____예고7장. 수 생성__수의 추상 기반 클래스____사용할 타입 결정____메소드 결정과 반사 연산자__산술 연산자의 스페셜 메소드__수 클래스 생성____FixedPoint 초기화 정의____FixedPoint 이항 산술 연산자 정의____FixedPoint 단항 산술 연산자 정의____FixedPoint 반사 연산자 구현____FixedPoint 비교 연산자 구현__수 해시 계산____좀 더 유용한 반올림 디자인__기타 스페셜 메소드 구현__할당 연산자로 최적화__요약____디자인 고려 사항과 트레이드오프____예고8장. 장식자와 믹스인: 횡단 관점__클래스와 의미____함수 구성____클래스 구성____클래스 디자인 원리____관점 지향 프로그래밍__내장 장식자 사용____표준 라이브러리 장식자 사용__표준 라이브러리 믹스인 클래스 사용____컨텍스트 매니저 믹스인 클래스 사용____클래스 기능 중지__간단한 함수 장식자 작성____별도 로거 생성__장식자의 매개변수__메소드 함수 장식자 생성__클래스 장식자 생성__클래스에 메소드 함수 추가__보안을 위한 장식자__요약____디자인 고려 사항과 트레이드오프____예고2부, 지속성과 직렬화9장. 직렬화와 저장: JSON, YAML, Pickle, CSV, XML__지속성과 클래스, 상태, 표현____일반적인 파이썬 용어__파일 시스템과 네트워크 고려 사항__지속성을 지원하는 클래스 정의____블로그와 포스트 렌더링__JSON으로 덤프와 로드____예제 클래스에서 JSON 지원____맞춤형 JSON 인코딩____맞춤형 JSON 디코딩____보안과 eval() 이슈____인코딩 함수 리팩토링____날짜 문자열 표준화____JSON을 파일에 쓰기__YAML로 덤프와 로드____YAML 데이터를 파일에 포매팅____YAML 표현 확장____보안과 안전 로드__피클로 덤프와 로드____안정적인 피클 처리를 위한 클래스 디자인____보안과 전역 이슈__CSV로 덤프와 로드____간단한 시퀀스를 CSV로 덤프____CSV로부터 간단한 시퀀스 로드____컨테이너와 복잡한 클래스 처리____CSV 파일에 다양한 행 타입 덤프와 로드____반복자로 CSV 행 필터링____CSV 파일에 조인 행 덤프와 로드__XML로 덤프와 로드____문자열 템플릿을 사용한 객체 덤프____xml.etree.ElementTree로 객체 덤프____XML 문서 로드__요약____디자인 고려 사항과 트레이드오프____스키마 진화____예고10장. 셸브를 통한 객체 저장과 추출__영속 객체 유스케이스 분석____ACID 속성__셸프 생성셸프에 들어갈 객체 디자인____객체의 키 디자인____객체의 대리 키 생성____간단한 키로 클래스 디자인____컨테이너나 컬렉션의 클래스 디자인____외래 키로 객체 참조____복잡한 객체의 CRUD 연산 디자인__검색, 스캔, 쿼리__셸브의 접근 계층 디자인____데모 스크립트 작성__효율성을 향상시키는 색인 생성____최상단 색인 생성__색인 유지 보수 기능 추가__라이트백으로 색인 업데이트____스키마 진화__요약____디자인 고려 사항과 트레이드오프____애플리케이션 소프트웨어 계층____예고11장. SQLite를 통한 객체 저장과 추출__SQL 데이터베이스, 지속성, 객체____SQL 데이터 모델: 행과 테이블____SQL DML문을 통한 CRUD 처리____SQL SELECT문으로 행 쿼리____SQL 트랜잭션과 ACID 속성____기본 키와 외래 데이터베이스 키 디자인__SQL로 애플리케이션 데이터 처리____순수 SQL로 클래스와 유사한 처리 구현__파이썬 객체와 SQLite BLOB 열 매핑__파이썬 객체와 데이터베이스 행 수동 매핑____SQLite의 접근 계층 디자인____컨테이너 관계 구현__색인으로 성능 향상__ORM 계층 추가____ORM 친화적인 클래스 디자인____ORM 계층으로 스키마 생성____ORM 계층으로 객체 조작__태그 문자열로 포스트 객체에 쿼리__색인으로 성능 향상____스키마 진화__요약____디자인 고려 사항과 트레이드오프____매핑 대안____키와 키 디자인____애플리케이션 소프트웨어 계층____예고12장. 객체 전송과 공유__클래스, 상태, 표현__HTTP와 REST를 사용한 객체 전송____REST를 통한 CRUD 연산 구현____비CRUD 연산 구현____REST 프로토콜과 ACID____JSON이나 XML, YAML 표현 선택__REST 서버 구현: WSGI와 mod_wsgi____간단한 REST 애플리케이션과 서버 생성____REST 클라이언트 구현____RESTful 서비스 데모와 단위 테스트__콜러블 클래스를 사용한 WSGI 애플리케이션____RESTful 객체 식별자 디자인____다중 계층 REST 서비스____룰렛 서버 생성____룰렛 클라이언트 생성__안전한 REST 서비스 생성____WSGI 인증 애플리케이션__웹 애플리케이션 프레임워크로 REST 구현__메시지 큐를 사용한 객체 전송____프로세스 정의____큐 생성과 데이터 제공__요약____디자인 고려 사항과 트레이드오프____스키마 진화____애플리케이션 소프트웨어 계층____예고13장. 설정 파일과 지속성__설정 파일 유스케이스__표현과 지속성, 상태, 사용성____애플리케이션 설정 디자인 패턴____객체 생성을 통한 설정____설정 계층 구조 구현__INI 파일에 설정 저장__eval() 변형으로 더 많은 리터럴 처리__PY 파일에 설정 저장____클래스 정의를 통한 설정____SimpleNamespace를 통한 설정____파이썬의 exec()를 사용한 설정__exec()을 걱정할 필요가 없는 이유__체인맵을 사용한 기본 값과 오버라이드__JSON이나 YAML에 설정 저장____플랫 JSON 설정 사용____YAML 설정 로딩__프로퍼티 파일에 설정 저장____프로퍼티 파일 파싱____프로퍼티 파일 사용__XML 파일에 설정 저장: PLIST 등____맞춤형 XML 설정 파일__요약____디자인 고려 사항과 트레이드오프____공유 설정 생성____스키마 진화____예고3부, 테스트와 디버깅, 배포, 유지 보수14장. 로깅과 경고 모듈__기본 로그 생성____클래스단 공유 로거 생성____로거 설정____로깅 시스템 가동과 중지____로거 명명____로거 레벨 확장____다수의 목적지를 위한 핸들러 정의____전달 규칙 관리__설정 주의 사항__제어와 디버그, 감사, 보안을 위한 특수 로깅____디버깅 로그 생성____감사와 보안 로그 생성__경고 모듈 사용____경고로 API 변경 알림____경고로 설정 문제 알림____경고로 가능한 소프트웨어 문제 알림__고급 로깅: 최근 메시지와 네트워크 데스티네이션____자동 테일 버퍼 생성____원격 프로세스에 로깅 메시지 전송____큐 초과 방지__요약____디자인 고려 사항과 트레이드오프____예고15장. 테스트 가능한 디자인__테스트 단위의 정의와 분리____종속성 최소화____간단한 단위 테스트 생성____테스트 스위트 생성____에지와 코너 케이스 넣기____테스트 종속성 모킹____더 많은 동작을 테스트하는 목 객체 사용__doctest를 사용한 테스트 케이스 정의____doctest와 unittest 결합____더욱 완전한 테스트 패키지 생성__설정과 해제 사용____OS 자원에 대한 설정과 해제 사용____데이터베이스에 대한 설정과 해제 사용__TestCase 클래스 계층 구조__외부에서 정의한 예상 결과 사용__자동 통합 또는 성능 테스트__요약____디자인 고려 사항과 트레이드오프____예고16장. 커맨드라인 처리__OS 인터페이스와 커맨드라인____인자와 옵션__argparse로 커맨드라인 파싱____간단한 온오프 옵션____인자가 있는 옵션____위치 인자____기타 인자____--version 표시와 종료____--help 표시와 종료__커맨드라인 옵션과 환경 변수 통합____좀 더 설정 가능한 기본 값 제공____환경 변수로 설정 파일 값 오버라이딩____설정 파일로 환경 변수 오버라이딩____설정에 None 값 할당__도움말 출력 맞춤화__최상위 main() 함수 생성____설정의 DRY 원칙____중첩 설정 컨텍스트 관리__전체적 프로그래밍____명령 클래스 디자인____분석 명령 하위 클래스 추가____애플리케이션 내에 기능 추가와 패키징____상위의 복합 명령 디자인__추가 복합 명령 디자인 패턴__다른 애플리케이션과의 통합__요약____디자인 고려 사항과 트레이드오프____예고17장. 모듈과 패키지 디자인__모듈 디자인____모듈 디자인 패턴____모듈과 클래스____일반적인 모듈 구성__전체적 모듈과 독립 모듈__패키지 디자인____모듈-패키지 하이브리드 디자인____여러 구현을 포함하는 패키지 디자인__메인 스크립트와 __main__ 모듈 디자인____실행 가능한 스크립트 파일 생성______main__ 모듈 생성____전체 프로그래밍__장기 실행 애플리케이션 디자인__src와 bin, test로 코드 조직__파이썬 모듈 설치__요약____디자인 고려 사항과 트레이드오프____예고18장. 품질과 설명서__help() 함수에 쓰일 문서화 문자열 작성__pydoc을 사용한 설명서__RST 마크업을 통한 출력 개선__텍스트 블록__RST 인라인 마크업__RST 디렉티브__RST 배우기__효과적인 문서화 문자열 작성__모듈과 패키지를 포함하는 파일단 문서화 문자열 작성____RST 마크업으로 상세 API 작성____클래스와 메소드 함수의 문서화 문자열 작성____함수 문서화 문자열 작성__더욱 정교한 마크업 기법__스핑크스를 사용한 설명서 생성____스핑크스 퀵스타트 사용____스핑크스 설명서 작성____설명서를 위한 4+1 뷰 작성____구현 문서 작성____스핑크스 교차 참조 생성____스핑크스 파일을 디렉토리로 리팩토링__설명서 작성__문학적 프로그래밍____문학적 프로그래밍 유스케이스____문학적 프로그래밍 도구 다루기__요약____디자인 고려 사항과 트레이드오프