파이썬의 잠재력을 끌어올리는 프로그래밍 기법
다른 언어에서 배운 패턴을 파이썬에 억지로 맞추지 말자. 파이썬의 단순함은 생산성을 빠르게 높여주지만, 그 단순함에 취해 언어가 제공하는 다양한 기능을 충분히 활용하지 못할 수도 있다. 이론과 실습을 함께 구성한 최신 개정판으로 파이썬을 더 효율적이고 능숙하게 다루는 방법을 배워보자.
이 책은 실무에서 직면하는 문제를 해결하기 위해 깊이 탐구하고, 꼭 필요한 내용만 담았다. 파이썬의 핵심 기능과 라이브러리를 상세히 안내하며, 더 짧고 빠르며 읽기 쉬운 코드를 작성하는 방법을 제시한다.
이번 개정판은 크게 다섯 부분으로 나누어 각 주제를 다루는 하나의 짧은 책처럼 구성했다.
● 데이터 구조체: 시퀀스, 딕셔너리, 집합, 유니코드, 데이터 클래스
● 객체로서의 함수: 일급 함수, 관련 디자인 패턴, 함수 선언의 타입 힌트
● 클래스와 프로토콜: 구성, 상속, 믹스인, 인터페이스, 연산자 오버로딩, 프로토콜, 정적 타입
● 제어 흐름: 컨텍스트 매니저, 제너레이터, 코루틴, async/await, 스레드/프로세스 풀
● 메타프로그래밍: 속성, 속성 디스크립터, 클래스 데커레이터, 메타클래스를 대체하거나 단순화하는 새로운 클래스 메타프로그래밍 훅
[PART 1 데이터 구조체]
CHAPTER 1 파이썬 데이터 모델
_1.1 이번 장의 변경 사항
_1.2 파이썬다운 카드 한 벌
_1.3 특별 메서드의 용도
_1.4 특별 메서드 개요
_1.5 len( )을 메서드로 만들지 않은 이유
_1.6 요약
CHAPTER 2 시퀀스의 배열
_2.1 이번 장의 변경 사항
_2.2 내장 시퀀스 개요
_2.3 지능형 리스트와 제너레이터 표현식
_2.4 불변 리스트를 뛰어넘는 튜플
_2.5 시퀀스와 반복형 객체의 언패킹
_2.6 시퀀스를 이용한 패턴 매칭
_2.7 슬라이싱
_2.8 시퀀스에 덧셈과 곱셈 연산자 사용하기
_2.9 list.sort( )와 sorted( ) 내장 함수
_2.10 리스트가 답이 아닐 때
_2.11 요약
CHAPTER 3 딕셔너리와 집합
_3.1 이번 장의 변경 사항
_3.2 최신 dict 구문
_3.3 매핑을 이용한 패턴 매칭
_3.4 매핑형의 표준 API
_3.5 존재하지 않는 키의 자동 처리
_3.6 dict의 변종
_3.7 불변 매핑
_3.8 딕셔너리 뷰
_3.9 dict의 작동 방식이 미치는 영향
_3.10 집합 이론
_3.11 집합의 작동 방식이 미치는 영향
_3.12 dict 뷰에 대한 집합 연산
_3.13 요약
CHAPTER 4 유니코드 텍스트와 바이트
_4.1 이번 장의 변경 사항
_4.2 문자 문제
_4.3 바이트 기본 지식
_4.4 기본 인코더/디코더
_4.5 인코딩/디코딩 문제 이해하기
_4.6 텍스트 파일 다루기
_4.7 유니코드 정규화로 제대로 비교하기
_4.8 유니코드 텍스트 정렬하기
_4.9 유니코드 데이터베이스
_4.10 이중 모드 str 및 bytes API
_4.11 요약
CHAPTER 5 데이터 클래스 빌더
_5.1 이번 장의 변경 사항
_5.2 데이터 클래스 빌더 개요
_5.3 고전적인 명명된 튜플
_5.4 자료형과 항목명이 지정된 튜플
_5.5 자료형 힌트 기본 지식
_5.6 @dataclass 추가 설명
_5.7 코드 악취로서의 데이터 클래스
_5.8 클래스 인스턴스 패턴 매칭
_5.9 요약
CHAPTER 6 객체 참조, 가변성, 재활용
_6.1 이번 장의 변경 사항
_6.2 변수의 개념
_6.3 정체성, 동질성, 별칭
_6.4 기본 복사는 얕은 복사
_6.5 참조로서의 함수 매개변수
_6.6 del과 가비지 컬렉션
_6.7 파이썬이 불변형을 갖고 노는 비법
_6.8 요약
[PART 2 객체로서의 함수]
CHAPTER 7 일급 객체로서의 함수
_7.1 이번 장의 변경 사항
_7.2 함수를 객체처럼 다루기
_7.3 고위 함수
_7.4 익명 함수
_7.5 아홉 가지 콜러블 객체
_7.6 사용자 정의 콜러블형
_7.7 위치 매개변수에서 키워드 전용 매개변수까지
_7.8 함수형 프로그래밍을 위한 패키지
_7.9 요약
CHAPTER 8 함수에서의 자료형 힌트
_8.1 이번 장의 변경 사항
_8.2 그래듀얼 타이핑 개요
_8.3 그래듀얼 타이핑 예
_8.4 지원되는 연산에 따라 정의되는 자료형
_8.5 어노테이션에 사용할 수 있는 자료형
_8.6 위치 전용과 가변 매개변수의 어노테이션
_8.7 불완전 타이핑과 강력한 테스팅
_8.8 요약
CHAPTER 9 데커레이터와 클로저
_9.1 이번 장의 변경 사항
_9.2 데커레이터 기본 지식
_9.3 파이썬이 데커레이터를 실행하는 시점
_9.4 등록 데커레이터
_9.5 변수 범위 규칙
_9.6 클로저
_9.7 nonlocal 선언
_9.8 간단한 데커레이터 구현하기
_9.9 표준 라이브러리에서 제공하는 데커레이터
_9.10 매개변수화된 데커레이터
_9.11 요약
CHAPTER 10 일급 함수 디자인 패턴
_10.1 이번 장의 변경 사항
_10.2 사례 연구: 리팩터링 전략
_10.3 명령 패턴
_10.4 요약
[PART 3 클래스와 프로토콜]
CHAPTER 11 파이썬다운 객체
_11.1 이번 장의 변경 사항
_11.2 객체 표현
_11.3 벡터 클래스의 부활
_11.4 대안 생성자
_11.5 @classmethod와 @staticmethod
_11.6 포맷된 출력
_11.7 해시 가능한 Vector2d
_11.8 위치 패턴 매칭 지원
_11.9 Vector2d 버전 #3: 전체 코드
_11.10 파이썬에서의 비공개 속성과 보호된 속성
_11.11 __slots__로 메모리 절약하기
_11.12 클래스 속성 오버라이드
_11.13 요약
CHAPTER 12 시퀀스 특별 메서드
_12.1 이번 장의 변경 사항
_12.2 Vector: 사용자 정의 시퀀스형
_12.3 Vector 버전 #1: Vector2d 호환
_12.4 프로토콜과 덕 타이핑
_12.5 Vector 버전 #2: 슬라이스 가능한 시퀀스
_12.6 Vector 버전 #3: 동적 속성 접근
_12.7 Vector 버전 #4: 해싱 및 더 빠른 ==
_12.8 Vector 버전 #5: 포매팅
_12.9 요약
CHAPTER 13 인터페이스, 프로토콜, 추상 베이스 클래스
_13.1 타이핑의 분류
_13.2 이번 장의 변경 사항
_13.3 두 가지 프로토콜
_13.4 덕 타이핑
_13.5 구스 타이핑
_13.6 정적 프로토콜
_13.7 요약
CHAPTER 14 상속: 득과 실
_14.1 이번 장의 변경 사항
_14.2 super( ) 함수
_14.3 내장형 상속의 문제점
_14.4 다중 상속과 메서드 결정 순서
_14.5 믹스인 클래스
_14.6 실세계에서의 다중 상속
_14.7 상속 처리
_14.8 요약
CHAPTER 15 자료형 힌트 조금 더 알아보기
_15.1 이번 장의 변경 사항
_15.2 오버로드된 시그너처
_15.3 TypedDict
_15.4 자료형 변환
_15.5 런타임에 자료형 힌트 읽기
_15.6 제네릭 클래스 구현하기
_15.7 변이성
_15.8 제네릭 정적 프로토콜의 구현
_15.9 요약
CHAPTER 16 연산자 오버로딩
_16.1 이번 장의 변경 사항
_16.2 연산자 오버로딩 기본 지식
_16.3 단항 연산자
_16.4 벡터 덧셈을 위한 + 연산자 오버로딩
_16.5 스칼라 곱셈을 위한 * 연산자 오버로딩
_16.6 @를 중위 연산자로 사용하기
_16.7 산술 연산자 요약
_16.8 풍부한 비교 연산자
_16.9 복합 할당 연산자
_16.10 요약
[PART 4 제어 흐름]
CHAPTER 17 반복자, 제너레이터, 고전적인 코루틴
_17.1 이번 장의 변경 사항
_17.2 단어의 시퀀스
_17.3 시퀀스가 반복형인 이유: iter( ) 함수
_17.4 반복형과 반복자
_17.5 __iter__( )가 있는 Sentence 클래스
_17.6 느긋한 Sentence
_17.7 제너레이터 표현식 사용이 적합한 상황
_17.8 등차수열 제너레이터
_17.9 표준 라이브러리의 제너레이터 함수들
_17.10 반복형을 리듀스하는 함수들
_17.11 yield from을 이용한 서브제너레이터
_17.12 제네릭 반복형
_17.13 고전적 코루틴
_17.14 요약
CHAPTER 18 with, match, else 블록
_18.1 이번 장의 변경 사항
_18.2 콘텍스트 관리자와 with 블록
_18.3 사례 연구: lis.py에서의 패턴 매칭
_18.4 if 문 뒤의 else 블록
_18.5 요약
CHAPTER 19 파이썬 동시성 모델
_19.1 이번 장의 변경 사항
_19.2 개요
_19.3 간단한 용어 정리
_19.4 헬로 월드 동시성 버전
_19.5 GIL의 실제 영향
_19.6 직접 만든 프로세스 풀
_19.7 멀티코어 세상의 파이썬
_19.8 요약
CHAPTER 20 동시 실행자
_20.1 이번 장의 변경 사항
_20.2 동시에 웹 내려받기
_20.3 concurrent.futures로 프로세스 실행하기
_20.4 Executor.map( ) 실험
_20.5 진행 상황을 출력하고 에러를 처리하면서 내려받기
_20.6 요약
CHAPTER 21 비동기 프로그래밍
_21.1 이 장의 변경 사항
_21.2 몇 가지 정의
_21.3 asyncio 예제: 도메인 검색
_21.4 새로운 개념: 대기형
_21.5 asyncio와 HTTPX로 내려받기
_21.6 비동기 콘텍스트 관리자
_21.7 asyncio 내려받기 프로그램 개선
_21.8 태스크를 실행자에 위임하기
_21.9 asyncio 서버 작성
_21.10 비동기 반복과 비동기 반복형
_21.11 asyncio 너머의 비동기: Curio
_21.12 비동기 객체의 자료형 힌트 지정하기
_21.13 비동기 방식에 대한 진실과 오해
_21.14 요약
[PART 5 메타프로그래밍]
CHAPTER 22 동적 속성과 프로퍼티
_22.1 이 장의 변경 사항
_22.2 동적 속성을 이용한 데이터 랭글링
_22.3 계산된 프로퍼티
_22.4 속성을 검증하기 위해 프로퍼티 사용하기
_22.5 프로퍼티 제대로 알아보기
_22.6 프로퍼티 팩토리 구현하기
_22.7 속성 제거 처리하기
_22.8 속성 처리를 위한 핵심 속성과 함수
_22.9 요약
CHAPTER 23 속성 디스크립터
_23.1 이 장의 변경 사항
_23.2 디스크립터 예: 속성 검증
_23.3 오버라이딩 디스크립터와 논오버라이딩 디스크립터
_23.4 메서드는 디스크립터
_23.5 디스크립터 사용 팁
_23.6 디스크립터 독스트링과 삭제 오버라이딩
_23.7 요약
CHAPTER 24 클래스 메타프로그래밍
_24.1 이 장의 변경 사항
_24.2 객체로서의 클래스
_24.3 type: 내장된 클래스 팩토리
_24.4 클래스 팩토리 함수
_24.5 __init_subclass__( ) 소개
_24.6 클래스 데커레이터를 이용한 클래스 개선
_24.7 임포트 타임과 런타임 비교
_24.8 메타클래스 기본 지식
_24.9 Checked를 위한 메타클래스 해결책
_24.10 메타클래스 고려 사항
_24.11 __prepare__( )로 메타클래스 파헤치기
_24.12 메타클래스 핵심 정리
_24.13 요약
파이썬을 더욱 위대하게!
파이썬 고급 기능을 마스터하는 최고의 실무 지침서
많은 프로그래머가 여전히 다른 언어에서 익힌 패턴에 파이썬을 맞추다 보니, 파이썬만의 고유한 기능과 철학을 충분히 탐구하지 못하는 경우가 많다. 이 책은 그런 개발자들에게 더 효율적이고 파이썬다운 코딩 방식을 제시한다.
튜플 언패킹과 디스크립터 같은 파이썬의 독창적인 기능을 소개하고, 일급 객체로서의 함수가 디자인 패턴에 미치는 영향을 살펴본다. 외부 패키지에 의존하지 않고 기본 라이브러리만으로 파이썬의 강력한 기능을 최대한 활용할 수 있도록 돕는다. 파이썬 3.10 이후 환경을 기반으로 하여 실무 개발자들이 추가된 기능을 활용해 효율적인 코드를 작성하는 데 큰 도움을 줄 것이다.
2판에서 업데이트된 내용
● 파이썬 3의 주요 업데이트 내용 반영
○ 파이썬 3.6+ : collections.abc.Collection 추상 베이스 클래스와 f-문자열
○ 파이썬 3.9+ : dict 형의 향상된 언패킹 구문, 매핑 병합 기능 개선
○ 파이썬 3.10+ : 새로운 패턴 매칭 기능, match/case를 이용한 매핑 방법
● 전반적인 개선 사항
○ 최신 버전으로 모든 내용 업데이트
○ 비동기 프로그래밍 및 새로운 기능을 지원하는 특별 메서드 내용 추가
○ 데이터 클래스 빌더 내용 추가
○ 두 개의 콜러블(네이티브 코루틴과 비동기 제너레이터) 내용 추가
○ 함수 시그너처의 자료형 힌트 내용 추가
○ 파이썬의 그래듀얼 타이핑 시스템 내용 추가
○ 개선된 파이썬의 세 가지 동시성 방식(스레드, 프로세스, 코루틴) 내용 추가
○ 파이썬의 새로운 메타프로그래밍 기능 강조
대상 독자
● 파이썬을 능숙하게 다루고 싶은 파이썬 실무 개발자
● 파이썬의 추가된 기능을 깊이 있게 배우고 싶은 실무자
● 더 효율적이고 파이썬다운 코드 작성법을 배우고 싶은 개발자