객체지향 파이썬 프로그래밍 (객체지향 디자인 패턴을 활용한 파이썬 코드 재사용 | 2 판)

객체지향 파이썬 프로그래밍 (객체지향 디자인 패턴을 활용한 파이썬 코드 재사용 | 2 판)

$48.98
Description
파이썬이 제공하는 다양한 객체지향 디자인 패턴을 활용해 강력한 파이썬 프로그램을 개발할 수 있도록 돕는다. 여러 디자인 대안을 소개하고 각 대안의 성능을 비교해보며 현재 해결하려는 문제에 적합한 디자인을 고르는 법을 알려준다. 스페셜 메서드를 통한 파이썬 내장 클래스 활용, 객체 지속성, 객체지향 테스트와 디버깅 같은 고급 파이썬 주제를 풍부하고 일관된 예제로 설명한다.
저자

스티븐로트

(StevenF.Lott)
컴퓨터가거대하고값비싸고귀했던1970년대에프로그래밍을시작했다.계약직소프트웨어개발자이자설계자로서크고작은수백여건의프로젝트에참여해왔다.10년넘게파이썬을사용해비즈니스문제를해결중이다.팩트출판사에서『유쾌한파이썬』(에이콘,2015),『PythonforSecretAgentsII』(2015),『PythonEssentials』(2015),『FunctionalPythonProgramming,3/e』(2022),『객체지향파이썬프로그래밍』(에이콘,2017)등을출간했다.현재미국동부해안을돌아다니며업계에머물고있다.

목차

1장.준비,도구,기법
__기술요구사항
__블랙잭게임소개
____게임시작
____블랙잭플레이어전략
____블랙잭시뮬레이션을위한객체디자인
__파이썬런타임과스페셜메서드
__인터랙션,스크립팅,도구
__IDE고르기
__일관성과스타일
__타입힌트와mypy프로그램
__성능-timeit모듈
__테스트-unittest와doctest
__문서화-sphinx와RST마크업
__컴포넌트설치
__요약


2장.__init__()메서드
__기술요구사항
__암묵적최상위클래스-object
__기반클래스객체의__init__()메서드
__최상위클래스의__init__()구현
__열거형상수생성
__팩토리함수로__init__()활용
____결함이있는팩토리디자인과모호한else절
____elif시퀀스를이용한단순화와일관성
____매핑과클래스객체를이용한단순화
____두병렬매핑
____튜플값에매핑
____부분함수방식
____팩토리용플루언트API
__각하위클래스에서__init__()구현
__복합객체
____컬렉션클래스래핑
____컬렉션클래스확장
____추가적인요구사항과디자인대안
__복잡한복합객체
____복합객체초기화
____init__()이필요없는상태가없는(stateless)객체
__추가클래스정의
__다중전략__init__()
____보다복잡한초기화
____정적혹은클래스단메서드초기화
__기타__init__()기법
____타입검사를포함하는초기화
____초기화,캡슐화,프라이버시
__요약


3장.매끄러운통합:기초스페셜메서드
__기술요구사항
____repr__()과__str__()메서드
____단순__str__()과__repr__()
____컬렉션__str__()과__repr__()
____format__()메서드
____중첩포맷명세
____컬렉션과포맷명세위임
____hash__()메서드
____해시선택
____불변객체정의상속
____불변객체정의오버라이딩
____가변객체정의오버라이딩
____가변핸드로부터프로즌핸드생성
____bool__()메서드
____bytes__()메서드
__비교연산자메서드
____비교디자인
____같은클래스의객체비교구현
____서로다른클래스의객체비교구현
____하드점수와소프트점수그리고다형성
____서로다른클래스비교예제
____del__()메서드
____참조계수와소멸
____순환참조와가비지컬렉션
____순환참조와weakref모듈
______del__()과close()메서드
____new__()메서드와불변객체
____new__()메서드와메타클래스
____메타클래스예제:클래스단로거
__요약


4장.속성접근과프로퍼티,디스크립터
__기술요구사항
__기본속성처리
____속성과__init__()메서드
__프로퍼티생성
____즉시계산프로퍼티
____setter와deleter프로퍼티
__스페셜메서드로속성접근
______slots__으로속성명제한
______getattr__()로동적속성생성
____NamedTuple의하위클래스로서불변객체생성
____즉시계산되는속성과dataclasses,__post_init__()
______setattr__()로증분계산
____getattribute__()메서드
__디스크립터생성
____비데이터디스크립터사용하기
____데이터디스크립터사용하기
__속성과프로퍼티에타입힌트사용
__dataclasses모듈사용하기
__속성디자인패턴
____프로퍼티대속성
____디스크립터로디자인
__요약


5장.일관된디자인의추상기반클래스
__기술요구사항
__추상기반클래스
__기반클래스와다형성
__콜러블
__컨테이너와컬렉션
__수
__그밖의추상화
____반복자추상화
____컨텍스트와컨텍스트매니저
__abc와typing모듈
______subclasshook__()메서드사용하기
____타입힌트를사용하는추상클래스
__요약,디자인고려사항,트레이드오프
____예고


6장.콜러블과컨텍스트
__기술요구사항
__콜러블디자인
__성능개선
____메모이제이션이나캐싱사용
__functools를사용한메모이제이션
____콜러블인터페이스로단순성추구
__복잡도와콜러블인터페이스
__컨텍스트관리와with문
____십진컨텍스트사용
____그밖에컨텍스트
____enter__()와__exit__()메서드정의
____예외처리
__팩토리로서의컨텍스트매니저
____컨텍스트매니저삭제
__요약
____콜러블의디자인고려사항과트레이드오프
____컨텍스트매니저의디자인고려사항과트레이드오프
____예고


7장.컨테이너와컬렉션생성
__기술요구사항
__컬렉션의추상기반클래스
__스페셜메서드예제
__표준라이브러리확장사용
____typing.NamedTuple클래스
____deque클래스
____ChainMap유스케이스
____OrderedDict컬렉션
____defaultdict하위클래스
____counter컬렉션
__새로운종류의컬렉션생성하기
__컬렉션타입좁히기
__새로운종류의시퀀스정의하기
____통계리스트
____즉시계산과지연계산선택
______getitem__(),__setitem__(),__delitem__(),슬라이스다루기
______getitem__(),__setitem__(),__delitem__()구현
____리스트래핑과위임
______iter__()로반복자생성
__새로운종류의매핑생성하기
__새로운종류의집합생성하기
____디자인원리
____Tree클래스정의
____TreeNode클래스정의
____이진트리백실험
__디자인고려사항과트레이드오프
__요약


8장.수생성
__기술요구사항
__수의추상기반클래스
____사용할타입결정
____메서드결정과반사연산자
__산술연산자의스페셜메서드
__수클래스생성
____FixedPoint초기화정의
____FixedPoint이항산술연산자정의
____FixedPoint단항산술연산자정의
____FixedPoint반사연산자구현
____FixedPoint비교연산자구현
__수해시계산
____더유용한반올림디자인
__다른스페셜메서드구현
__제자리연산자로최적화
__요약


9장.장식자와믹스인:횡단관심사
__기술요구사항
__클래스와그의미
____장식자의타입힌트와속성
____함수의속성
____장식된클래스구성
____클래스디자인원칙
____관점지향프로그래밍
__내장장식자사용
____표준라이브러리장식자사용
__표준라이브러리믹스인클래스사용
____믹스인클래스로enum사용
__간단한함수장식자작성
____별도로거생성
__장식자매개변수화
__메서드함수장식자생성
__클래스장식자생성
__클래스에메서드추가
__장식자를사용한보안
__요약


10장.직렬화와저장:JSON,YAML,Pickle,CSV,XML
__기술요구사항
__지속성과클래스,상태,표현이해하기
____일반적인파이썬용어
__파일시스템과네트워크고려사항
__지속성을지원하는클래스정의
____블로그와포스트렌더링
__JSON덤프와로드
____JSON타입힌트
____예제클래스에서JSON지원
____JSON인코딩커스터마이징
____JSON디코딩커스터마이징
____보안과eval()이슈
____인코딩함수리팩터링
____날짜문자열표준화
____JSON을파일에쓰기
__YAML덤프와로드
____YAML데이터파일에포매팅하기
____YAML표현확장
____보안과안전한로드
__pickle덤프와로드
____안정적인피클처리를위한클래스디자인
____보안과전역이슈
__CSV로덤프와로드
____간단한시퀀스를CSV로덤프
____CSV로부터간단한시퀀스로드
____컨테이너와복잡한클래스처리
____CSV파일에다양한행타입덤프와로드
____반복자로CSV행필터링
____CSV파일에조인행덤프와로드
__XML덤프와로드
____문자열템플릿을사용한객체덤프
____xml.etree.ElementTree로객체덤프
____XML문서로드
__요약
____디자인고려사항과트레이드오프
____스키마진화
____예고


11장.셸브를통한객체저장과추출
__기술요구사항
__객체지속유스케이스분석
____ACID속성
__셸브생성
__셸브로표현할수있는객체디자인
____타입힌트를갖는객체디자인
____객체의키디자인
____객체의대리키생성
____단순키로클래스디자인
____컨테이너나컬렉션의클래스디자인
____외래키로객체참조
____복잡한객체의CRUD연산디자인
__검색,스캔,쿼리
__셸브의접근계층디자인
____데모스크립트작성
__효율성을높이는색인생성
____캐시생성
__색인유지보수기능추가
__라이트백으로색인업데이트
____스키마진화
__요약
____디자인고려사항과트레이드오프
____애플리케이션소프트웨어계층
____예고


12장.SQLite를통한객체저장과추출
__기술요구사항
__SQL데이터베이스,지속성,객체
____SQL데이터모델:행과테이블
____SQLDML문을통

출판사 서평

◈이책에서다루는내용◈

◆__init__()메소드의다양한디자인패턴
◆플라스크로RESTful웹서비스를만드는방법
◆SOLID디자인패턴과원칙
◆파이썬3의추상기반클래스기능
◆사용자애플리케이션의클래스생성
◆PyTest와픽스처로테스트가능한코드디자인
◆with문을활용한컨텍스트매니저의디자인
◆표준라이브러리와디자인기법을사용한새로운타입의컬렉션생성
◆새로운수타입개발

◈이책의대상독자◈

고급파이썬을사용하므로파이썬3에능숙한독자를대상으로한다.문제해결을위해프로그래밍언어를배워야할때유용할것이다.
이책은문법이나기본적인개념은다루지않는다.다른언어에익숙한프로그래머라면파이썬으로옮길때도움이될것이다.
파이썬2프로그래머가파이썬3를배울때특히유용하다.(버전2에서3로변환하는도구등의)변환유틸리티나six모듈같은병립(coexistence)라이브러리는다루지않는다.이책은온전히파이썬3로만할수있는새로운개발에집중한다.


◈이책의구성◈

1장,‘준비,도구,기법’에서는unittest와doctest,docstring같은미리알아야할주제와스페셜메서드명몇가지를다룬다.
2장,‘__init__()메서드’에서는_init_()메서드를자세히설명하고구현한다.단순객체를초기화하는여러형태를살펴보고,컬렉션과컨테이너를포함하는보다복잡한객체도알아본다.
3장,‘매끄러운통합:기초스페셜메서드’는간단한클래스정의를확장해스페셜메서드를추가하는법을자세히설명한다.
4장,‘속성접근과프로퍼티,디스크립터’는기본처리가어떻게동작하는지자세히살펴본다.언제어디서기본동작을오버라이드할지알아내는법을배운다.또한디스크립터를비롯해파이썬의내부동작방식을알아본다.
5장,‘일관된디자인의추상기반클래스’에서는collections.abc모듈의추상기반클래스를알아본다.수정하거나확장할다양한컨테이너와컬렉션의일반적인개념을살펴본다.비슷하게구현하는수(number)개념도살펴본다.
6장,‘콜러블과컨텍스트’에서는contextlib의도구를사용해컨텍스트매니저를생성하는몇가지방법을알아본다.콜러블객체의여러디자인변형도보인다.이과정에서스테이트풀콜러블객체가왜단순한함수보다더유용한지설명한다.
7장,‘컨테이너와컬렉션생성’에서는컨테이너클래스의기초를설명한다.컨테이너와컨테이너가제공하는다양한기능을생성하는여러스페셜메서드도다시살펴본다.
8장,‘수생성’에서는+,-,*,/,//,%,**같은필수산술연산자를다룬다.또한〈,〉,〈=,〉=,==,!=같은비교연산자도알아본다.
9장,‘장식자와믹스인:횡단관심사’에서는간단한함수장식자와인자를갖는함수장식자,클래스장식자,메서드장식자를알아본다.
10장,‘직렬화와저장:JSON,YAML,Pickle,CSV,XML’에서는JSON과YAML,Pickle,CSV,XML과같은다양한데이터표현에특화된라이브러리를사용하는간단한지속성을다룬다.
11장,‘셸브를통한객체저장과추출’에서는shelve(와dbm)같은파이썬모듈로수행하는기초데이터베이스연산을설명한다.
12장,‘SQLite를통한객체저장과추출’에서는SQL과관계형데이터베이스라는보다복잡한주제를다룬다.SQL의특징과객체지향프로그래밍의특징은서로잘맞지않아임피던스불일치(impedancemismatch)문제가발생한다.
13장,‘객체전송과공유’에서는객체전송에쓰이는HTTP프로토콜과JSON,YAML,XML표현을알아본다.
14장,‘설정파일과지속성’에서는설정파일로파이썬애플리케이션을동작시키는다양한방법을알아본다.
15장,‘디자인원칙과패턴’에서는SOLID디자인원칙을살펴본다.몇가지모범사례를따르면유지보수가능한고품질의파이썬소프트웨어를구성할수있다.
16장,‘로깅과경고’에서는모듈logging과warning모듈을사용해감사와디버그정보를생성하는법을알아본다.print()함수보다한단계진화한방법이다.
17장,‘테스트가능한디자인에서는테스트가능한디자인과unittest,doctest의사용법을다룬다.
18장,‘명령줄처리’에서는argparse모듈로옵션과매개변수를파싱하는법을알아본다.또한명령디자인패턴을사용해쉘스크립트를작성하지않고도통합시키고확장시킬수있는프로그램컴포넌트를생성해본다.
19장,‘모듈과패키지디자인’에서는모듈과패키지디자인을다룬다.모듈내에서로연관된클래스와패키지내에서로연관된모듈을살펴본다.
20장,‘품질과설명서’에서는소프트웨어가올바르고적절하게구현됐다는신뢰를구축하기위해디자인을설명하는방법을알아본다.

◈옮긴이의말◈

훌륭한애플리케이션은훌륭한디자인으로부터시작된다.하나의예술작품처럼개발도뼈대를세우고살을붙여가는과정을거친다.개발자가첫번째로해야할일은여러디자인대안을수립하고그중무엇이더나은지평가하는것이다.이단계를생략하면허점투성이에다손대기도어려운결과물이나온다.
이책은강력한파이썬프로그램을개발하는데꼭필요한객체지향디자인패턴을소개한다.파이썬이제공하는다양한객체지향요소를적재적소에활용하도록돕고,디자인대안간성능도비교해본다.어떤문제를해결하느냐에따라올바른디자인의정의도달라지므로문제에적합한디자인을어떻게가려내는지도알려준다.
1부에서는객체지향프로그래밍기법을비롯해스페셜메서드로파이썬내장클래스를활용하는방법을다룬다.초기화,속성,추상기반클래스,컨텍스트,컨테이너,수,장식자등파이썬의기본적인객체지향요소를하나씩설명한다.2부에서는저장소에객체를지속시키는방법을다룬다.JSON,shelve,ORM등으로파일이나데이터베이스에다양한형태의객체를지속시켜본다.3부에서는객체지향방식으로테스트하고디버깅하는방법을소개하고SOLID디자인원칙을살펴본다.
1판과달라진점은크게두가지다.첫째,전반적으로예제가더풍부하고자연스러워실전에활용하기쉬워졌다.둘째,SOLID디자인을소개하는15장‘디자인원칙과패턴’장이새롭게추가됐다.좋은디자인을고르려면항상정해진디자인원칙을고수해야한다는점에서1판을읽었더라도한번쯤들여다볼만하다.
이책은디자인패턴을다루는책도,그렇다고객체지향프로그래밍을다루는책도아니다.그보다활용이나응용,심화와같은단어가어울린다.평범한프로그래머에서탁월한프로그래머로거듭나고싶은열정적인개발자에게좋은디딤돌이돼줄것이다.