파이썬은 접근하기 쉽고 사용하기도 쉬운 장점이 있지만 자칫 하면 코드의 양이 방대해지기도 쉽다. 그리고 그에 따른 문제가 발생할 가능성이 높은데 이 책에서는 이를 방지하고 해결할 수 있는 방법을 알려준다. 타입을 정의하는 것을 시작으로 데이터 클래스, 클래스 등 파이썬이 제공하는 다양한 타입을 알아보고 이들의 사용법을 정리한다. 그리고 이 타입을 체킹하기 위한 다양한 도구를 소개한다. 확장성을 확보하기 위해 조합, 이벤트 주도 아키텍처, 플러그인도 알아보며, 소프트웨어의 안전망을 확보하기 위해 정적 분석, 테스트 전략, 인수 테스트, 속성 기반 테스트, 뮤테이션 테스트 등을 살펴본다.
2장. 파이썬 타입의 소개
__타입이란?
____기계적인 표현
____의미적 표현
__타입 시스템
____강한 스펙트럼과 약한 스펙트럼
____동적 타입과 정적 타입
____덕 타이핑
__마치며
3장. 타입 어노테이션
__타입 어노테이션이란?
__타입 어노테이션의 장점
____자동 완성
____타입 체커
____연습: 버그 찾기
__타입 어노테이션은 사용할 때
__마치며
4장. 타입의 제어
__Optional 타입
__Union 타입
____곱 타입과 합 타입
__Literal 타입
__Annotated 타입
__NewType
__Final 타입
__마치며
5장. 컬렉션 타입
__컬렉션의 어노테이션
__동종 컬렉션과 이종 컬렉션
__TypedDict
__새로운 컬렉션 생성
____제네릭
____기존 타입의 변경
____ABC처럼 쉽게
__마치며
6장. 타입 체커의 커스터마이징
__타입 체커의 설정
____mypy의 설정
____mypy 리포트
____mypy를 빠르게
__기타 타입 체커
____Pyre
____Pyright
__마치며
7장. 실용적 타입 체킹
__트레이드오프
__더 빠른 손익 분기
____취약점 찾기
____전략적으로 대상 코드를 잡아라
____도구화에 의존하기
__마치며
8장. 사용자 정의 타입: 열거형
__사용자 정의 타입
__열거형
____Enum
____사용하지 않을 때
__고급 사용법
____자동 변수
____플래그
____정수형 변환
____고유성
__마치며
9장. 사용자 정의 타입: 데이터 클래스
__데이터 클래스의 동작
__사용법
____문자열 변환
____등가 비교
____관계 비교
____불변성
__다른 타입과의 비교
____데이터 클래스와 딕셔너리
____데이터 클래스와 TypedDict
____데이터 클래스와 namedtuple
__마치며
10장. 사용자 정의 타입: 클래스
__클래스 해부
____생성자
__불변 속성
____깨진 불변 속성 피하기
____불변 속성이 이익인 이유
____불변 속성을 통한 커뮤니케이션
____클래스의 소비
____유지 보수자들은 어떻게?
__캡슐화와 불변 속성의 유지 보수
____캡슐화
____데이터 접근의 보호
____운영
__마치며
11장. 사용자 정의 인터페이스
__자연스러운 인터페이스 설계
____사용자처럼 생각하기
__자연스런 상호작용
____자연스런 상호작용의 실제
____매직 메서드
____컨텍스트 매니저
__마치며
12장. 하위 타입
__상속
__치환 가능성
__설계 고려 사항
____합성
__마치며
13장. 프로토콜
__타입 시스템 간의 관계
____타입을 비워두거나 Any로 사용
____Union의 사용
____상속의 사용
____믹스인의 사용
__프로토콜
____프로토콜의 정의
__고급 사용법
____프로토콜의 합성
____런타임 시 체크할 수 있는 프로토콜
____프로토콜을 만족시키는 모듈
__마치며
14장. pydantic으로 런타임 체크
__동적 설정
__pydantic
____유효성 검사 도구
____유효성 검사와 파싱
__마치며
17장. 조합 가능성
__조합 가능성
__정책과 메커니즘
__더 작은 스케일로 구성
____함수의 조합
____데코레이터
__알고리듬의 조합
__마치며
18장. 이벤트 주도 아키텍처
__동작 방식
____단점
__단일 이벤트
____메시지 중개자가 있는 경우
____관찰자 패턴
__이벤트 스트리밍
__마치며
19장. 플러그인
__템플릿 메서드 패턴
__전략 패턴
__플러그인 아키텍처
__마치며
20장. 정적 분석
__린팅
____사용자 정의 Pylint 플러그인 작성
____플러그인의 분해
__기타 정적 분석 도구
____복잡도 분석 도구
____보안 분석
__마치며
21장. 테스트 전략
__테스트 전략의 정의
____테스트란?
__테스트 비용 줄이기
____AAA 테스트
__마치며
22장. 인수 테스트
__행위 주도 개발(BDD)
____걸킨 언어
____실행 가능 사양
__추가적인 behave의 기능
____단계의 파라미터화
____테이블 주도 요구 사항
____단계 매칭
____테스트 수명주기의 사용자화
____테스트의 선별적 수행을 위한 태그 사용
____리포트 생성
__마치며
23장. 속성 기반 테스트
__Hypothesis와 속성 기반 테스트
____Hypothesis의 마법
____기존 테스트와의 비교
__Hypothesis의 최대한 활용
____Hypothesis 전략
____알고리듬 생성
__마치며
24장. 뮤테이션 테스트
__뮤테이션 테스트가란?
__mutmut을 이용한 뮤테이션 테스트
____뮤턴트의 수정
____뮤테이션 테스트 리포트
__뮤테이션 테스트의 적용
____커버리지의 오류(그리고 다른 메트릭)
__마치며
Author
패트릭 비아포어,김성준
14년 이상을 소프트웨어 업계에서 일했으며, 낙뢰감지, 통신 그리고 운영체제를 포함한 미션 크리티컬(Misson Critical)한 소프트웨어를 주로 제작하고 유지보수해왔다. C++ 같은 정적 타입 언어로 작업해왔던 경험이 파이썬과 같은 동적 타입 언어를 다룰 때 많은 영향을 끼쳤으며 이런 영향이 동적 타입 언어를 더 견고하고 안전하게 만든다고 믿고 있다. 또한 밋업 HSY.py의 오거나이저로서 파이썬에서의 장애물을 식별하고 이를 넘어서려는 초보자와 전문가들을 돕고 있다. 개발자 커뮤니티가 컴퓨터 과학 또는 소프트웨어 공학이라는 주제에 더 쉽게 접근하도록 만들어주는 것이 목표다. 현재 캐노니컬(Canonical)에 재직 중이며, 우분투 이미지를 공용 클라우드 제공자에 배포하는 파이프라인 도구를 제작하고 있다. 또한 그의 비즈니스 사이트인 Kudzera, LLC(https://kudzera.com)를 통해 소프트웨어 개발 컨설팅도 진행하고 있다.
14년 이상을 소프트웨어 업계에서 일했으며, 낙뢰감지, 통신 그리고 운영체제를 포함한 미션 크리티컬(Misson Critical)한 소프트웨어를 주로 제작하고 유지보수해왔다. C++ 같은 정적 타입 언어로 작업해왔던 경험이 파이썬과 같은 동적 타입 언어를 다룰 때 많은 영향을 끼쳤으며 이런 영향이 동적 타입 언어를 더 견고하고 안전하게 만든다고 믿고 있다. 또한 밋업 HSY.py의 오거나이저로서 파이썬에서의 장애물을 식별하고 이를 넘어서려는 초보자와 전문가들을 돕고 있다. 개발자 커뮤니티가 컴퓨터 과학 또는 소프트웨어 공학이라는 주제에 더 쉽게 접근하도록 만들어주는 것이 목표다. 현재 캐노니컬(Canonical)에 재직 중이며, 우분투 이미지를 공용 클라우드 제공자에 배포하는 파이프라인 도구를 제작하고 있다. 또한 그의 비즈니스 사이트인 Kudzera, LLC(https://kudzera.com)를 통해 소프트웨어 개발 컨설팅도 진행하고 있다.