파이썬 객체지향 프로그래밍 (다각도로 살펴보는 OOP 시스템 | 4 판)

파이썬 객체지향 프로그래밍 (다각도로 살펴보는 OOP 시스템 | 4 판)

$46.64
Description
객체지향의 기본 개념부터 시작해 객체지향 디자인을 포괄적으로 다룬다. 타입 힌트를 사용하는 방법, 클래스들 간의 다양한 관계를 활용해야 할 시기와 방법, 추상화 및 파이썬 데이터 구조를 통해 디자인을 단순화할 수 있는 기법, 빠르고 효율적인 파이썬의 내장 컬렉션을 다루는 이터레이터 패턴, 그리고 12가지 고급 디자인 패턴으로 견고한 애플리케이션을 개발하는 방법 등을 훌륭한 예제로 배울 수 있다. 또한 파이썬 애플리케이션을 자동화된 단위 테스트 모듈과 모의 객체를 사용해 쉽게 테스트할 수 있는 고급 테스트 기법도 배울 수 있다. 마지막으로 객체지향 디자인을 활용해 동시성 프로그래밍 기술을 사용하는 방법을 보여준다.
저자

스티븐로트

StevenF.Lott
컴퓨터가크고비싸며드물던때부터프로그래밍을해왔다.수십년동안첨단기술분야에서일하면서많은아이디어와기술을접했다.90년대부터파이썬으로다양한도구와애플리케이션을개발해왔다.『객체지향파이썬프로그래밍』(에이콘,2017),『모던파이썬쿡북』(에이콘,2018),『함수형파이썬프로그래밍』(에이콘,2017)을포함해팩트출판사에서많은책을썼다.

목차

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실전
____AsyncIOfuture읽기
____네트워킹을위한AsyncIO
____로그작성데모
____AsyncIO클라이언트
__식사하는철학자들벤치마크
__사례연구
__정리
__연습
__요약

출판사 서평

◈이책에서다루는내용◈

◆클래스생성및메서드정의를통한파이썬객체구현
◆상속을사용한클래스기능확장
◆예외를사용한비정상적인상황처리
◆객체지향기능을사용해야할때와사용하지말아야할때에대한이해
◆널리사용되는몇가지디자인패턴과구현
◆단위및통합테스트의단순성발견및테스트의중요성
◆동적코드에대한정적타입체크방법
◆asyncio를이용한동시성프로그래밍및프로그램속도향상방법

◈이책의대상독자◈

이책은파이썬의객체지향프로그래밍을처음접하는독자를대상으로한다.파이썬에대한기초지식이있다고가정한다.다른객체지향프로그래밍언어에대한배경지식이있는독자를위해파이썬의접근방식이갖는독특한특징을설명할것이다.
데이터과학및데이터분석에서파이썬을많이사용하기때문에관련수학과통계개념도다룬다.이분야의지식은개념을보다구체적으로적용하는데도움이될수있다.

◈이책의구성◈

이책은전체적으로네부분으로구성돼있다.처음여섯개의장은객체지향프로그래밍의핵심원리와개념을설명하며파이썬에서이개념들이어떻게구현되는지를설명한다.다음세개의장에서는객체지향프로그래밍의렌즈를통해파이썬내장기능을자세히살펴본다.10장,11장,12장에서는여러가지디자인패턴과이것을파이썬에서처리하는방법을살펴본다.마지막부분에서는테스트와동시성을다룬다.

1장‘객체지향디자인’에서는객체지향디자인의기초가되는핵심개념을소개한다.상태와동작,속성과메서드,객체를클래스로그룹화하는방법등에대한아이디어를통해로드맵을제공한다.캡슐화,상속및구성관계도살펴볼것이다.사례연구에서는k-최근접이웃(k-NN,k-NearestNeighbors)분류기를구현하는머신러닝문제를소개한다.
2장‘파이썬의객체’에서는파이썬에서클래스정의가어떻게동작하는지보여준다.여기에는타입힌트(typehints)라고불리는타입주석(typeannotations),클래스정의,모듈,패키지등이포함된다.클래스정의및캡슐화에대한실무적인고려사항을알려준다.사례연구에서는k-NN분류기의일부클래스를구현해본다.
3장‘객체가유사한경우’에서는클래스들이서로어떻게연관돼있는지설명한다.여기에는상속및다중상속의사용법이포함된다.클래스계층구조에서클래스간의다형성개념을살펴볼것이다.사례연구에서는가장가까운이웃을찾는데사용되는거리계산을위한몇가지디자인을살펴볼것이다.
4장,‘예상치못한상황을예상하기’에서는파이썬의예외와예외처리에대해자세히살펴본다.내장예외의계층구조도다룬다.또한고유한문제도메인이나애플리케이션을반영하기위해고유한예외를정의하는방법도살펴볼것이다.사례연구에서는데이터유효성검사에예외를적용한다.
5장‘객체지향프로그래밍의사용시기’에서는디자인기법에대해더깊이있게다룬다.이장에서는파이썬에서프로퍼티(property)를사용해속성(attribute)을구현하는방법을살펴볼것이다.또한객체들의컬렉션을다루기위한관리자객체의일반적인개념을살펴본다.사례연구에서는이런아이디어를적용해k-NN분류기를폭넓게구현한다.
6장‘추상기본클래스와연산자오버로딩’에서는추상화에대한개념과파이썬이추상기본클래스를지원하는방법에대해깊이있게다룬다.여기에는공식적인Protocol정의메소드와덕타이핑(ducktyping)을비교하는것이포함된다.또한파이썬의내장연산자를오버로드하는기법도포함된다.메타클래스와이를사용해클래스구조를수정하는방법도살펴볼것이다.사례연구에서는추상화를조심스럽게사용해디자인을단순화하는방법을보여주기위해기존클래스중일부를재정의할것이다.
7장,‘파이썬데이터구조’에서는다양한파이썬내장컬렉션을살펴볼것이다.이장에서는튜플,딕셔너리,리스트,집합등을다룬다.또한데이터클래스와명명된튜플이클래스의여러공통기능을제공함으로써어떻게디자인을단순화할수있는지살펴본다.사례연구에서는이런새로운기술을사용하기위해이전의일부클래스정의를수정할것이다.
8장‘객체지향과함수형프로그래밍의교차점’에서는클래스정의가아닌파이썬구조체(construct)를살펴본다.파이썬의모든것이객체지향적이지만함수정의를사용하면클래스정의의복잡성을피해호출가능한객체를생성할수있다.또한파이썬의컨텍스트관리자구조체와with문을살펴볼것이다.사례연구에서는클래스복잡성을피하는대안적인디자인을살펴볼것이다.
9장‘문자열,직렬화,파일경로’에서는객체를문자열로직렬화하는방법과문자열을파싱해객체를생성하는방법을다룬다.여기서는Pickle,JSON,CSV등을포함한여러형식을살펴볼것이다.사례연구에서는k-NN분류기가샘플데이터를로드하고처리하는방법을다시살펴본다.
10장‘이터레이터패턴’에서는반복처리에대한파이썬의보편적인개념을설명한다.모든내장컬렉션은반복가능하며,이디자인패턴은파이썬동작에서핵심을차지한다.파이썬의컴프리헨션(comprehension)과제너레이터(generator)함수도살펴볼것이다.사례연구에서는제너레이터표현식과리스트컴프리헨션을사용해학습및테스트샘플을분할하는이전디자인을다시살펴본다.
11장‘일반디자인패턴’에서는몇가지일반적인객체지향디자인을살펴본다.여기에는데코레이터(Decorator),옵저버(Observer),전략(Strategy),커맨드(Command),상태(State),싱글톤(Singleton)디자인패턴이포함된다.
12장‘고급디자인패턴’에서는좀더발전된객체지향디자인을살펴본다.여기에는어댑터(Adapter),퍼사드(Fa?ade),플라이웨이트(Flyweight),추상팩토리(AbstractFactory),컴포짓(Composite),템플릿(Template)패턴이포함된다.
13장‘객체지향프로그램테스트’에서는unittest와pytest를사용해파이썬애플리케이션을위한자동화된단위테스트스위트를제공하는방법을보여준다.이를통해모의객체를사용해테스트할때단위를분리하는것과같은고급테스트기법을살펴볼수있다.사례연구에서는3장에서다뤘던거리계산에대해서테스트케이스를작성하는것을보여준다.
14장‘동시성’에서는멀티코어및멀티프로세서컴퓨터시스템을사용해신속하게계산을수행하고외부이벤트에응답하는소프트웨어를작성하는방법을살펴본다.스레드와멀티프로세싱뿐만아니라파이썬의asyncio모듈도살펴볼것이다.사례연구에서는k-NN모델에서하이퍼파라미터튜닝을수행하기위해이런기술을사용하는방법을보여줄것이다.

◈옮긴이의말◈

이책은파이썬에서객체지향디자인을활용해견고하고유지보수가쉬운애플리케이션을개발하는데중점을두고설명한다.모든장에걸쳐있는사례연구는아이리스꽃분류를위한머신러닝애플리케이션을개발하는실제프로젝트를다루고있어서전체적인맥락에서각주제를일관성있게이해할수있도록구성돼있는것이장점이다.또한UML다이어그램을통해디자인패턴과코드를통합적으로다루고있는것도장점이다.
파이썬3.5부터타입힌트가도입됐지만실무에서는잘사용되지않았다.하지만이책을통해타입힌트를사용하면타입힌트가지속적인유지보수에얼마나큰기여를하는지알게될것이다.유사한기능을가진객체들에대해상속이나구성관계를사용하는방법과파이썬의편리한특징중하나인덕타이핑(ducktyping)의유용함을배울수있다.
객체지향을사용해야할때가언제인지,그리고사용하지말아야할때가언제인지를다루는부분은이책의핵심중하나이다.이책의가장중요한부분은널리사용되는12가지디자인패턴과이패턴을파이썬에서구현하는방법을다루는부분이라고할수있다.파이썬이다른언어에비해객체지향디자인을더쉽고우아하게적용할수있다는것을알게될것이다.
객체지향프로그래밍과함수형프로그래밍이어떻게다르고어떤부분에서서로만나는지다루고있는부분은매우흥미롭다.이주제를잘이해하면클래스의복잡성으로피할수있는대안적인디자인을도입하는데도움이될것이다.또한가지,파이썬의컴프리헨션(comprehension)과제너레이터(generator)함수는코드를단순화할수있는훌륭한방법이다.파이썬의내장컬렉션이얼마나효율적인도구인지다시한번이해하게될것이다.
마지막으로unittest와pytest를사용해파이썬애플리케이션을위한자동화된단위테스트스위트를제공하는방법을보여준다.이렇게자동화된테스트를사용하면개발프로젝트에서상당히많은부하를줄일수있다.독자들도파이썬의자동화된테스트에익숙해지기를바란다.
이책은파이썬이얼마나훌륭하고사용하기편한개발언어인지잘보여준다.이책에서배운기술을활용해파이썬개발프로젝트에서많은성과를얻을수있을것이다.