이미 소장하고 있다면 판매해 보세요.
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 __결론 __정리 __연습 __요약 11장 일반 디자인 패턴 __데코레이터 패턴 ____데코레이터 패턴 예제 ____파이썬의 데코레이터 패턴 __옵저버 패턴 ____옵저버 패턴의 예 __전략 패턴 ____전략 패턴의 예 ____파이썬의 전략 패턴 __커맨드 패턴 ____커맨드 패턴의 예 __상태 패턴 ____상태 패턴의 예 ____상태 패턴 대 전략 패턴 __싱글톤 패턴 ____싱글톤 구현 __사례 연구 __정리 __연습 __요약 12장 고급 디자인 패턴 __어댑터 패턴 ____어댑터 패턴의 예 __퍼사드 패턴 ____퍼사드 패턴의 예 __플라이웨이트 패턴 ____파이썬에서 플라이웨이트 패턴의 예 ____여러 메시지를 갖는 버퍼 ____파이썬의__ slots__를 이용한 메모리 최적화 __추상 팩토리 패턴 ____추상 팩토리 패턴의 예 ____파이썬의 추상 팩토리 패턴 __컴포짓 패턴 ____컴포짓 패턴의 예 __템플릿 패턴 ____템플릿 패턴의 예 __사례 연구 __정리 __연습 __요약 13장 객체지향 프로그램 테스트 __왜 테스트를 해야 하는가 ____테스트 주도 개발 ____테스트 목표 ____테스트 패턴 __unittest로 단위 테스트하기 __pytest로 단위 테스트하기 ____pytest의 설정 및 해제 기능 ____설정 및 해제를 위한 pytest 픽스쳐 ____더 정교한 픽스쳐 __pytest에서 테스트 건너뛰기 __Mock을 사용한 객체 모방 ____추가 패치 기법 ____센티넬 객체 __얼마나 해야 충분한 테스트인가? __테스트와 개발 __사례 연구 ____거리 계산 알고리듬 단위 테스트 ____Hyperparameter 클래스 단위 테스트 __정리 __연습 __요약 14장 동시성 __동시 처리에 대한 배경지식 __스레드 ____스레드의 많은 문제 __멀티프로세싱 ____멀티프로세싱 풀 ____큐 ____멀티프로세싱의 문제점 __Futures __AsyncIO ____AsyncIO 실전 ____AsyncIO future 읽기 ____네트워킹을 위한 AsyncIO ____로그 작성 데모 ____AsyncIO 클라이언트 __식사하는 철학자들 벤치마크 __사례 연구 __정리 __연습 __요약 |
저스티븐 로트
관심작가 알림신청Steven F. Lott
스티븐 로트의 다른 상품
저더스티 필립스
관심작가 알림신청Dusty Phillips
역김우현
관심작가 알림신청김우현의 다른 상품
이 책에서 다루는 내용
◆ 클래스 생성 및 메서드 정의를 통한 파이썬 객체 구현 ◆ 상속을 사용한 클래스 기능 확장 ◆ 예외를 사용한 비정상적인 상황 처리 ◆ 객체지향 기능을 사용해야 할 때와 사용하지 말아야 할 때에 대한 이해 ◆ 널리 사용되는 몇 가지 디자인 패턴과 구현 ◆ 단위 및 통합 테스트의 단순성 발견 및 테스트의 중요성 ◆ 동적 코드에 대한 정적 타입 체크 방법 ◆ asyncio를 이용한 동시성 프로그래밍 및 프로그램 속도 향상 방법 이 책의 대상 독자 이 책은 파이썬의 객체지향 프로그래밍을 처음 접하는 독자를 대상으로 한다. 파이썬에 대한 기초 지식이 있다고 가정한다. 다른 객체지향 프로그래밍 언어에 대한 배경 지식이 있는 독자를 위해 파이썬의 접근 방식이 갖는 독특한 특징을 설명할 것이다. 데이터 과학 및 데이터 분석에서 파이썬을 많이 사용하기 때문에 관련 수학과 통계 개념도 다룬다. 이 분야의 지식은 개념을 보다 구체적으로 적용하는 데 도움이 될 수 있다. 이 책의 구성 이 책은 전체적으로 네 부분으로 구성돼 있다. 처음 여섯 개의 장은 객체지향 프로그래밍의 핵심 원리와 개념을 설명하며 파이썬에서 이 개념들이 어떻게 구현되는지를 설명한다. 다음 세 개의 장에서는 객체지향 프로그래밍의 렌즈를 통해 파이썬 내장 기능을 자세히 살펴본다. 10장, 11장, 12장에서는 여러 가지 디자인 패턴과 이것을 파이썬에서 처리하는 방법을 살펴본다. 마지막 부분에서는 테스트와 동시성을 다룬다. 1장 ‘객체지향 디자인’에서는 객체지향 디자인의 기초가 되는 핵심 개념을 소개한다. 상태와 동작, 속성과 메서드, 객체를 클래스로 그룹화하는 방법 등에 대한 아이디어를 통해 로드맵을 제공한다. 캡슐화, 상속 및 구성 관계도 살펴볼 것이다. 사례 연구에서는 k-최근접 이웃(k-NN, k-Nearest Neighbors) 분류기를 구현하는 머신러닝 문제를 소개한다. 2장 ‘파이썬의 객체’에서는 파이썬에서 클래스 정의가 어떻게 동작하는지 보여준다. 여기에는 타입 힌트(type hints)라고 불리는 타입 주석(type annotations), 클래스 정의, 모듈, 패키지 등이 포함된다. 클래스 정의 및 캡슐화에 대한 실무적인 고려사항을 알려준다. 사례 연구에서는 k-NN 분류기의 일부 클래스를 구현해본다. 3장 ‘객체가 유사한 경우’에서는 클래스들이 서로 어떻게 연관돼 있는지 설명한다. 여기에는 상속 및 다중 상속의 사용법이 포함된다. 클래스 계층 구조에서 클래스 간의 다형성 개념을 살펴볼 것이다. 사례 연구에서는 가장 가까운 이웃을 찾는 데 사용되는 거리 계산을 위한 몇 가지 디자인을 살펴볼 것이다. 4장, ‘예상치 못한 상황을 예상하기’에서는 파이썬의 예외와 예외 처리에 대해 자세히 살펴본다. 내장 예외의 계층 구조도 다룬다. 또한 고유한 문제 도메인이나 애플리케이션을 반영하기 위해 고유한 예외를 정의하는 방법도 살펴볼 것이다. 사례 연구에서는 데이터 유효성 검사에 예외를 적용한다. 5장 ‘객체지향 프로그래밍의 사용 시기’에서는 디자인 기법에 대해 더 깊이 있게 다룬다. 이 장에서는 파이썬에서 프로퍼티(property)를 사용해 속성(attribute)을 구현하는 방법을 살펴볼 것이다. 또한 객체들의 컬렉션을 다루기 위한 관리자 객체의 일반적인 개념을 살펴본다. 사례 연구에서는 이런 아이디어를 적용해 k-NN 분류기를 폭넓게 구현한다. 6장 ‘추상 기본 클래스와 연산자 오버로딩’에서는 추상화에 대한 개념과 파이썬이 추상 기본 클래스를 지원하는 방법에 대해 깊이 있게 다룬다. 여기에는 공식적인 Protocol 정의 메소드와 덕 타이핑(duck typing)을 비교하는 것이 포함된다. 또한 파이썬의 내장 연산자를 오버로드하는 기법도 포함된다. 메타클래스와 이를 사용해 클래스 구조를 수정하는 방법도 살펴볼 것이다. 사례 연구에서는 추상화를 조심스럽게 사용해 디자인을 단순화하는 방법을 보여주기 위해 기존 클래스 중 일부를 재정의할 것이다. 7장, ‘파이썬 데이터 구조’에서는 다양한 파이썬 내장 컬렉션을 살펴볼 것이다. 이 장에서는 튜플, 딕셔너리, 리스트, 집합 등을 다룬다. 또한 데이터클래스와 명명된 튜플이 클래스의 여러 공통 기능을 제공함으로써 어떻게 디자인을 단순화 할 수 있는지 살펴본다. 사례 연구에서는 이런 새로운 기술을 사용하기 위해 이전의 일부 클래스 정의를 수정할 것이다. 8장 ‘객체지향과 함수형 프로그래밍의 교차점’에서는 클래스 정의가 아닌 파이썬 구조체(construct)를 살펴본다. 파이썬의 모든 것이 객체지향적이지만 함수 정의를 사용하면 클래스 정의의 복잡성을 피해 호출 가능한 객체를 생성할 수 있다. 또한 파이썬의 컨텍스트 관리자 구조체와 with 문을 살펴볼 것이다. 사례 연구에서는 클래스 복잡성을 피하는 대안적인 디자인을 살펴볼 것이다. 9장 ‘문자열, 직렬화, 파일 경로’에서는 객체를 문자열로 직렬화하는 방법과 문자열을 파싱해 객체를 생성하는 방법을 다룬다. 여기서는 Pickle, JSON, CSV 등을 포함한 여러 형식을 살펴볼 것이다. 사례 연구에서는 k-NN 분류기가 샘플 데이터를 로드하고 처리하는 방법을 다시 살펴본다. 10장 ‘이터레이터 패턴’에서는 반복 처리에 대한 파이썬의 보편적인 개념을 설명한다. 모든 내장 컬렉션은 반복 가능하며, 이 디자인 패턴은 파이썬 동작에서 핵심을 차지한다. 파이썬의 컴프리헨션(comprehension)과 제너레이터(generator) 함수도 살펴볼 것이다. 사례 연구에서는 제너레이터 표현식과 리스트 컴프리헨션을 사용해 학습 및 테스트 샘플을 분할하는 이전 디자인을 다시 살펴본다. 11장 ‘일반 디자인 패턴’에서는 몇 가지 일반적인 객체지향 디자인을 살펴본다. 여기에는 데코레이터(Decorator), 옵저버(Observer), 전략(Strategy), 커맨드(Command), 상태(State), 싱글톤(Singleton) 디자인 패턴이 포함된다. 12장 ‘고급 디자인 패턴’에서는 좀 더 발전된 객체지향 디자인을 살펴본다. 여기에는 어댑터(Adapter), 퍼사드(Facade), 플라이웨이트(Flyweight), 추상 팩토리(Abstract Factory), 컴포짓(Composite), 템플릿(Template) 패턴이 포함된다. 13장 ‘객체지향 프로그램 테스트’에서는 unittest와 pytest를 사용해 파이썬 애플리케이션을 위한 자동화된 단위 테스트 스위트를 제공하는 방법을 보여준다. 이를 통해 모의 객체를 사용해 테스트할 때 단위를 분리하는 것과 같은 고급 테스트 기법을 살펴볼 수 있다. 사례 연구에서는 3장에서 다뤘던 거리 계산에 대해서 테스트 케이스를 작성하는 것을 보여준다. 14장 ‘동시성’에서는 멀티코어 및 멀티프로세서 컴퓨터 시스템을 사용해 신속하게 계산을 수행하고 외부 이벤트에 응답하는 소프트웨어를 작성하는 방법을 살펴본다. 스레드와 멀티프로세싱뿐만 아니라 파이썬의 asyncio 모듈도 살펴볼 것이다. 사례 연구에서는 k-NN 모델에서 하이퍼파라미터 튜닝을 수행하기 위해 이런 기술을 사용하는 방법을 보여줄 것이다. 지은이의 말 파이썬 프로그래밍 언어는 매우 인기가 있으며 다양한 애플리케이션에서 사용된다. 파이썬 언어는 작은 프로그램을 비교적 쉽게 만들 수 있도록 설계됐다. 보다 정교한 소프트웨어를 만들기 위해서는 여러 가지 중요한 프로그래밍 및 소프트웨어 디자인 기술이 필요하다. 이 책은 파이썬으로 프로그램을 만들기 위한 객체지향 접근법을 설명한다. 객체지향 프로그래밍의 용어를 소개하고 단계별 예제를 통해 소프트웨어 디자인 및 파이썬 프로그래밍을 학습한다. 개별 요소로부터 소프트웨어를 빌드하기 위해 상속과 구성 관계를 사용하는 법을 설명한다. 파이썬의 내장 예외 및 내장 데이터 구조는 물론 파이썬 표준 라이브러리의 요소들을 사용하는 방법을 보여준다. 다양한 디자인 패턴을 자세한 예제와 함께 설명한다. 이 책은 소프트웨어가 동작하는지 확인하기 위해 자동화된 테스트를 작성하는 방법도 다룬다. 또한 파이썬에서 제공하는 다양한 동시성 라이브러리를 사용하는 법을 보여준다. 이를 통해 컴퓨터에서 멀티코어 및 멀티프로세서를 사용할 수 있는 소프트웨어를 작성할 수 있다. 사례 연구를 통해서는 약간 복잡한 문제에 대한 여러 가지 솔루션을 보여주는 간단한 머신러닝 예제를 다룬다. 옮긴이의 말 이 책은 파이썬에서 객체지향 디자인을 활용해 견고하고 유지보수가 쉬운 애플리케이션을 개발하는 데 중점을 두고 설명한다. 모든 장에 걸쳐 있는 사례 연구는 아이리스 꽃 분류를 위한 머신러닝 애플리케이션을 개발하는 실제 프로젝트를 다루고 있어서 전체적인 맥락에서 각 주제를 일관성 있게 이해할 수 있도록 구성돼 있는 것이 장점이다. 또한 UML 다이어그램을 통해 디자인 패턴과 코드를 통합적으로 다루고 있는 것도 장점이다. 파이썬 3.5부터 타입 힌트가 도입됐지만 실무에서는 잘 사용되지 않았다. 하지만 이 책을 통해 타입 힌트를 사용하면 타입 힌트가 지속적인 유지보수에 얼마나 큰 기여를 하는지 알게 될 것이다. 유사한 기능을 가진 객체들에 대해 상속이나 구성 관계를 사용하는 방법과 파이썬의 편리한 특징 중 하나인 덕 타이핑(duck typing)의 유용함을 배울 수 있다. 객체지향을 사용해야 할 때가 언제인지, 그리고 사용하지 말아야 할 때가 언제인지를 다루는 부분은 이 책의 핵심 중 하나이다. 이 책의 가장 중요한 부분은 널리 사용되는 12가지 디자인 패턴과 이 패턴을 파이썬에서 구현하는 방법을 다루는 부분이라고 할 수 있다. 파이썬이 다른 언어에 비해 객체지향 디자인을 더 쉽고 우아하게 적용할 수 있다는 것을 알게 될 것이다. 객체지향 프로그래밍과 함수형 프로그래밍이 어떻게 다르고 어떤 부분에서 서로 만나는지 다루고 있는 부분은 매우 흥미롭다. 이 주제를 잘 이해하면 클래스의 복잡성으로 피할 수 있는 대안적인 디자인을 도입하는 데 도움이 될 것이다. 또 한 가지, 파이썬의 컴프리헨션(comprehension)과 제너레이터(generator) 함수는 코드를 단순화할 수 있는 훌륭한 방법이다. 파이썬의 내장 컬렉션이 얼마나 효율적인 도구인지 다시 한번 이해하게 될 것이다. 마지막으로 unittest와 pytest를 사용해 파이썬 애플리케이션을 위한 자동화된 단위 테스트 스위트를 제공하는 방법을 보여준다. 이렇게 자동화된 테스트를 사용하면 개발 프로젝트에서 상당히 많은 부하를 줄일 수 있다. 독자들도 파이썬의 자동화된 테스트에 익숙해지기를 바란다. 이 책은 파이썬이 얼마나 훌륭하고 사용하기 편한 개발 언어인지 잘 보여준다. 이 책에서 배운 기술을 활용해 파이썬 개발 프로젝트에서 많은 성과를 얻을 수 있을 것이다. |