객체지향 파이썬 : 파이게임과 GUI로 객체지향 프로그래밍 정복하기

객체지향 파이썬 : 파이게임과 GUI로 객체지향 프로그래밍 정복하기

$35.28
저자

어브캘브

(IrvKalb)
캘리포니아대학교샌타크루즈실리콘밸리익스텐션(UCSCSiliconValleyExtension)과실리콘밸리대학교(UniversityofSiliconValley)에서외래교수로서파이썬을이용한객체지향프로그래밍과목을가르치고있다.컴퓨터과학석사과정을마치고30년간다양한프로그래밍언어로객체지향프로그래밍을사용했다.10년이상학생들을가르치며교육소프트웨어를개발했다.저서로는《LearntoProgramwithPython3》(Apress,2018)이있다.

목차

옮긴이머리말xii
베타리더후기xiv
감사의글xvi
이책에대하여xviii

PARTI객체지향프로그래밍이란
CHAPTER1예제로알아보는절차적파이썬3
1.1카드게임HigherorLower4
__1.1.1데이터표현하기4/1.1.2구현하기4/1.1.3재사용할수있는코드7
1.2은행계좌시뮬레이션7
__1.2.1업무와데이터요구사항분석8/1.2.2구현⑴:함수없이다루는단일계좌8/1.2.3구현⑵:함수로다루는단일계좌10/1.2.4구현⑶:두계좌13/1.2.5구현⑷:리스트로다루는다중계좌15/1.2.6구현⑸:딕셔너리로다루는계좌목록17
1.3절차적구현이겪는공통문제20
1.4객체지향적해결책:첫클래스보기21
1.5정리22

CHAPTER2OOP로물체모델링하기23
2.1소프트웨어로물체모델링하기23
__2.1.1상태와행동:조명스위치예24
2.2클래스와객체25
2.3클래스,객체,객체의생성27
__2.3.1파이썬클래스코드작성28/2.3.2스코프와인스턴스변수29/2.3.3함수와메서드의차이30/2.3.4클래스로객체생성하기31/2.3.5객체의메서드호출하기32/2.3.6같은클래스로여러객체생성하기33/2.3.7클래스로구현된파이썬의데이터유형35/2.3.8객체정의36
2.4조금더복잡한클래스정의하기36
2.5훨씬더복잡한현실적인물체를클래스로표현하기39
__2.5.1메서드에매개변수전달하기44/2.5.2여러객체다루기46/2.5.3매개변수의초기화48
2.6클래스의활용사례50
2.7객체지향적해결책51
2.8정리51

CHAPTER3객체의멘털모델과SELF의의미53
3.1DimmerSwitch클래스되돌아보기54
3.2높은수준의멘털모델55
3.3더깊은멘털모델56
3.4self의의미59
3.5정리62

CHAPTER4여러객체관리63
4.1은행계좌클래스63
4.2클래스코드불러오기66
4.3테스트코드작성68
__4.3.1여러계좌생성하기68/4.3.2리스트로여러Account객체관리71/4.3.3식별자를둔여러객체73/4.3.4대화형메뉴구성75
4.4객체를관리하는객체만들기78
__4.4.1객체를관리하는객체빌드80/4.4.2객체를관리하는객체생성메인코드83
4.5예외처리로오류잘다루기84
__4.5.1try와except85/4.5.2raise문과사용자가정의한예외85
4.6은행프로그램에예외처리적용하기87
__4.6.1예외처리를품은Account클래스87/4.6.2최적화된Bank클래스89/4.6.3예외를처리하는메인코드91
4.7여러객체를담은리스트에동일한메서드호출하기93
4.8인터페이스vs.구현94
4.9정리95

PARTII파이게임과GUI
CHAPTER5파이게임시작하기99
5.1파이게임설치하기100
5.2윈도우세부사항101
__5.2.1윈도우의좌표시스템101/5.2.2픽셀색상104
5.3이벤트기반프로그램105
5.4파이게임사용하기107
__5.4.1빈윈도우를화면에띄우기107/5.4.2이미지그리기111/5.4.3마우스클릭감지하기114/5.4.4키보드다루기117/5.4.5위치기반애니메이션생성하기121/5.4.6파이게임의rect사용하기124
5.5소리재생하기127
__5.5.1소리효과재생하기127/5.5.2배경음악재생하기128
5.6도형그리기129
__5.6.1기본도형의종류132
5.7정리134

CHAPTER6객체지향파이게임135
6.1객체지향파이게임으로튕기는공화면보호기만들기135
__6.1.1공클래스정의하기136/6.1.2Ball클래스사용하기138/6.1.3여러Ball객체생성139/6.1.4수많은Ball객체생성하기141
6.2객체지향적으로재사용가능한버튼만들기142
__6.2.1버튼클래스정의하기142/6.2.2SimpleButton클래스를사용하는메인코드145/6.2.3여러버튼을가진프로그램만들기146
6.3객체지향적으로재사용가능한텍스트출력용클래스만들기148
__6.3.1텍스트를출력하는절차알아보기148/6.3.2SimpleText클래스정의하기149
6.4SimpleText와SimpleButton으로데모프로그램만들기150
6.5인터페이스vs.구현153
6.6콜백153
__6.6.1콜백만들기154/6.6.2SimpleButton에콜백적용하기155
6.7정리158

CHAPTER7파이게임의GUI위젯159
7.1함수또는메서드로매개변수전달하기159
__7.1.1위치기반또는키워드기반매개변수161/7.1.2키워드매개변수에의미부여하기162/7.1.3기본값으로None사용하기163/7.1.4기본값과키워드선정하기165/7.1.5GUI위젯의기본값165
7.2pygwidgets패키지165
__7.2.1설정하기166/7.2.2전체적인설계167/7.2.3이미지추가하기168/7.2.4버튼,체크박스,라디오버튼추가하기169/7.2.5텍스트출력과입력172/7.2.6pygwidgets이제공하는다양한클래스175/7.2.7pygwidgets을활용한예제프로그램176
7.3일관된API의중요성177
7.4정리177

PARTIII캡슐화,다형성,상속
CHAPTER8캡슐화181
8.1함수로캡슐화해보기182
8.2객체를통한캡슐화182
__8.2.1pygwidgets이제공하는또다른클래스183
8.3캡슐화에대한견해184
__8.3.1직접접근이란무엇이고왜피해야하는가184/8.3.2게터와세터에대한엄격한견해189/8.3.3안전한직접접근190
8.4인스턴스변수를더비공개적으로만들기191
__8.4.1묵시적인비공개191/8.4.2명시적인비공개192
8.5데커레이터와@property193
8.6pygwidgets클래스로캡슐화살펴보기197
8.7실제사례로캡슐화살펴보기197
8.8추상화199
8.9정리202

CHAPTER9다형성203
9.1현실속물체로알아보는메시지보내기204
9.2프로그래밍에서사용하는고전적인다형성예시204
9.3파이게임의도형을사용한예206
__9.3.1Square클래스206/9.3.2Circle과Triangle클래스208/9.3.3도형을생성하는메인프로그램211/9.3.4패턴확장하기213
9.4다형성에기초한pygwidgets213
9.5연산자와다형성214
__9.5.1매직메서드215/9.5.2비교연산자매직메서드216/9.5.3매직메서드를품은Rectangle클래스218/9.5.4매직메서드를사용하는메인프로그램220/9.5.5산술연산자매직메서드222/9.5.6벡터223
9.6객체값을표현하는문자열생성하기225
9.7매직메서드를품은Fraction클래스228
9.8정리231

CHAPTER10상속233
10.1객체지향의상속234
10.2상속구현하기236
10.3Employee와Manager클래스로상속알아보기237
__10.3.1기반클래스:Employee237/10.3.2하위클래스:Manager238/10.3.3테스트코드240
10.4클라이언트관점에서바라본하위클래스241
10.5상속의실제예242
__10.5.1InputNumber클래스243/10.5.2DisplayMoney클래스245/10.5.3사용예248
10.6동일기반클래스를상속하는다양한클래스251
10.7추상클래스와메서드256
10.8pygwidgets이상속을사용하는방식260
10.9계층적클래스262
10.10상속을활용한프로그래밍의어려움264
10.11정리265

CHAPTER11객체가사용하는메모리관리267
11.1객체의생명주기267
__11.1.1참조카운트268/11.1.2가비지컬렉션275
11.2클래스변수275
__11.2.1상수용클래스변수276/11.2.2숫자를세기위한클래스변수277
11.3풍선프로그램으로여러개념종합하기278
__11.3.1상수모듈280/11.3.2메인프로그램코드(클라이언트)281/11.3.3풍선관리자283/11.3.4Balloon클래스와객체286
11.4메모리관리기법:슬롯289
11.5정리291

PARTIV게임개발에객체지향프로그래밍사용하기
CHAPTER12카드게임295
12.1Card클래스296
12.2Deck클래스299
12.3HigherorLower게임301
__12.3.1메인프로그램(클라이언트)301/12.3.2Game클래스303
12.4__name__으로테스트하기306
12.5다른유형의카드게임308
__12.5.1블랙잭용카드덱308/12.5.2보편적이지않은카드덱을사용하는게임309
12.6정리309

CHAPTER13타이머311
13.1타이머사용프로그램312
13.2타이머를구현하는세가지방식313
__13.2.1프레임수세기313/13.2.2타이머이벤트314/13.2.3경과시간을계산해타이머만들기315
13.3pyghelpers설치하기318
13.4Timer클래스318
13.5화면에시간출력하기321
__13.5.1CountUpTimer322/13.5.2CountDownTimer325
13.6정리326

CHAPTER14애니메이션327
14.1애니메이션클래스구현하기328
__14.1.1SimpleAnimation클래스328/14.1.2SimpleSpriteSheetAnimation클래스333/14.1.3두클래스병합하기337
14.2pygwidgets패키지의Animation클래스338
__14.2.1Animation클래스338/14.2.2SpriteSheetAnimation클래스340/14.2.3공통기반클래스:PygAnimation342/14.2.4애니메이션예제프로그램343
14.3정리344

CHAPTER15장면345
15.1상태머신알아보기346
15.2파이게임으로상태머신예제프로그램만들기348
15.3여러장면을관리하는장면관리자354
15.4장면관리자를사용한예제프로그램355
__15.4.1메인프로그램357/15.4.2장면구성하기359/15.4.3기본장면363
15.5장면을사용한가위바위보게임364
15.6장면간상호작용하기369
__15.6.1원하는장면의정보요청하기370/15.6.2원하는장면에정보보내기370/15.6.3모든장면에정보보내기371/15.6.4장면간상호작용테스트하기372
15.7장면관리자구현하기372
__15.7.1run()메서드374/15.7.2메인메서드375/15.7.3장면간상호작용하기377
15.8정리379

CHAPTER16완전한게임‘다저’만들기381
16.1모달다이얼로그381
__16.1.1예/아니오및경고다이얼로그382/16.1.2응답다이얼로그386
16.2‘다저’라는완전한게임만들기388
__16.2.1게임개요388/16.2.2게임구현하기389/16.2.3게임확장하기410
16.3정리411

CHAPTER17디자인패턴과마무리413
17.1MVC413
__17.1.1파일디스플레이로살펴보는MVC414/17.1.2통계데이터디스플레이로살펴보는MVC415/17.1.3MVC패턴의장점420
17.2마무리421

찾아보기423

출판사 서평

게임을만들며시각적으로익히는객체지향프로그래밍

파이썬언어의기본문법을공부했다면본격적인프로그래밍에들어가기전에컴퓨터프로그래밍의패러다임에대해생각해볼차례다.이책에서는절차적프로그래밍으로작성된몇가지예제로프로그램의복잡성을인지한후객체지향프로그래밍이어떻게더간결하고관리하기쉽게프로그램을바꾸는지살펴본다.책의가장큰특징은파이게임과GUI로객체지향사고를시각적으로표현한데있다.코드로만이해하기어려운부분을시각적으로표현하여자연스럽게객체지향프로그래밍을익히도록구성했다.초반부에서는일상생활에서접하기쉬운간단한예제로객체지향프로그래밍의핵심요소를배운다.조명스위치,TV리모컨,은행시스템시뮬레이션등을구성해보면서클래스와객체부터객체관리자개념까지객체지향프로그래밍의기본개념을이해한다.중반부에서는파이게임과GUI로이벤트기반프로그래밍을실습한다.공튀기기프로그램,풍선터뜨리기게임등을만들면서캡슐화,다형성,상속등객체지향프로그래밍의핵심을익힌다.후반부에서는절차적프로그래밍으로만든카드게임을객체지향프로그래밍으로재구성해보고,슬라이더퍼즐,가위바위보,회피게임등애니메이션과사운드까지포함한완성된프로그램을만들어본다.파이썬기초를끝내고작은프로그램을만들어봤다면더복잡하고큰프로그램을만들고싶을것이다.복잡한로직을구현하다보면좀더간결하고효과적인코드가필요해진다.코드와데이터를효율적으로결합해재사용할수있는프로그램을작성하게해주는객체지향프로그래밍에대해배우고싶다면이책을읽어보자.

주요내용

-캡슐화,다형성,상속등객체지향프로그래밍의핵심요소살펴보기
-객체관리자객체를사용하여여러객체생성및관리하기
-파이게임으로GUI프로그램만들기
-캡슐화를사용하여클라이언트코드에서객체내부의세부정보숨기기
-다형성을사용하여하나의인터페이스를정의하고여러클래스에서구현하기
-상속을적용하여기존코드를개선하기
-게임개발에객체지향프로그래밍활용하기

책속에서

이책은소프트웨어제작을절차적방식과는다른시각인객체지향프로그래밍(object-orientedprogramming,OOP)패러다임으로다룬다.OOP는코드와데이터를결합하는방식으로소프트웨어를만드는방법을제시한다.절차적프로그래밍에서일부생길수있는복잡성을피할수있다.
---p.3

매우간단한예제프로그램이다.이처럼작은단위의함수로시작하면OOP로쉽게전환할수있게해준다.1장의설명처럼상태는전역변수switchIsOn으로표현돼앞코드는단일조명스위치에만작동한다.하지만재사용가능한코드를만드는것이함수를작성하는목적이다.앞코드를OOP방식으로다시작성해보겠다.먼저재작성할코드를충분히이해할수있도록관련이론을먼저살펴보자.
---p.25

이책의목적은독자를게임프로그래머로만드는것이아니다.OOP방법을더욱명확하게시각적으로확인할수있는환경을구축하고자파이게임을활용한다.파이게임을사용해윈도우에객체를시각적으로출력한다.사용자와객체의상호작용을처리하는과정을보면서효과적인객체지향사용방법을깊이이해할수있을것이다.
---p.99

OOP의세가지주요개념중첫번째로살펴볼것은캡슐화(encapsulation)다.캡슐화라고하면귀중한내용물을외부환경에서보호하는우주캡슐,세포벽,의약품젤라틴캡슐같은이미지를연상시킨다.프로그래밍에서말하는캡슐화도비슷한데,훨씬더구체적인의미를가진다.상태및내부작동방식의세부사항에담은모든코드를한곳에보관하고이를외부에감추는것을의미한다.
---p.181

다양한조명을제어하는스위치더미로가득찬방을상상해보자.일부전구는구식백열전구,다른일부는형광등,또다른일부는최신LED전구로구성됐다.모든스위치를위로올리면모든전구에‘켜기’라는메시지를보낸다.백열등,형광등,LED전구는각자매우다른방식으로빛을만들지만사용자가작동시키는방법은‘스위치를켜는행위’로모두같다.
---p.204

플레이어는윈도우상단에서출현하는빨간악당을피해야한다.악당은조금씩화면아래로움직인다.게임플레이영역의하단에도달하는악당은소멸한다.이때플레이어는점수를획득한다.플레이어는마우스로주인공아이콘을움직인다.주인공아이콘이악당과부딪치면게임은끝이난다.가끔초록보상이무작위로등장해수평으로움직인다.초록보상을먹으면25점을획득한다.
---p.388