객체
객체
객체
객체
지향
지향
지향
지향
프로
그래
밍프
로그
래밍
프로
그래
밍프
로그
래밍
(Obje
ct O
riente
d P
rogra
mm
ing)
(Obje
ct O
riente
d P
rogra
mm
ing)
(Obje
ct O
riente
d P
rogra
mm
ing)
(Obje
ct O
riente
d P
rogra
mm
ing)
13장
강사–
강대
기
차례
차례
차례
차례
(Agenda)
(Agenda)
(Agenda)
(Agenda)
�IS
A 상
속�
public
으로
파생
된클
래스
�pro
tecte
d 접
근�
생성
자멤
버초
기자
리스
트�
업캐
스트
와다
운캐
스트
�가
상멤
버함
수�
초기
(정적
) 결
합과
말기
(동적
) 결
합�
추상
화기
초클
래스
�순
수가
상함
수(p
ure
virtu
al fu
nction)
�public
상속
은언
제어
떻게
?
상속
으로
상속
으로
상속
으로
상속
으로
할 할할할수 수수수
있는
있는
있는
있는
일 일일일(8
00
(800
(800
(800쪽 쪽쪽쪽
) )))
�근
본적
으로
더높
은수
준의
재활
용성
제공
�기
존의
클래
스에
기능
을추
가
�클
래스
안의
데이
터에
다른
데이
터멤
버추
가
�클
래스
메쏘
드가
동작
하는
방식
을변
경
간단
한간
단한
간단
한간
단한
기초
기초
기초
기초
클래
스클
래스
클래
스클
래스
(801~
804
(801~
804
(801~
804
(801~
804쪽 쪽쪽쪽
) )))
�Table
Tennis
Pla
yer
클래
스파
생(8
03쪽
)cla
ss R
ate
dPla
yer
: public
Table
Tennis
Pla
yer
{ } �Public
상속–
기초
클래
스의
priva
te–
기초
클래
스의
public
�파
생클
래스
의public
–기
초클
래스
의priva
te �
파생
클래
스의
일부
이나
접근
불가
�파
생클
래스
는(그
림13.1
in 8
04 쪽
)–
기초
클래
스의
데이
터멤
버들
을저
장
–기
초클
래스
의멤
버함
수들
을사
용
상속
상속
상속
상속
관계
를관
계를
관계
를관
계를
나타
내는
나타
내는
나타
내는
나타
내는
도표
도표
도표
도표
(pro
tecte
d(p
rote
cte
d(p
rote
cte
d(p
rote
cte
d는 는는는
844
844
844
844쪽 쪽쪽쪽
참조
참조
참조
참조
) )))
접근
불가
접근
불가
접근
불가
Priva
te 멤
버
Priva
tePro
tecte
dPro
tecte
dPro
tecte
d멤
버
Priva
tePro
tecte
dPublic
Public
멤버
Priva
te 상
속Pro
tecte
d
상속
Public
상속
상속
형태
기초
클래
스
파생
파생
파생
파생
클래
스클
래스
클래
스클
래스
�초
기자
리스
트(m
em
ber in
itia
lization lis
t) –
805쪽
Rate
dPla
yer::R
ate
dPla
yer(u
nsig
ned intr, c
onst char*
fn, const char*
ln, boolht)
:
Table
Tennis
Pla
yer(f
n,ln,h
t)
{
this
->ra
ting =
r;
} Rate
dPla
yer::R
ate
dPla
yer(u
nsig
ned intr, c
onst char*
fn, const char*
ln, boolht)
:
Table
Tennis
Pla
yer(f
n,ln,h
t), ra
ting(r
)
{ }
�객
체생
성과
파괴
순서
–기
초클
래스
생성
자�
파생
클래
스생
성자
–초
기자
리스
트가
없으
면기
초클
래스
의디
폴트
생성
자
–파
생클
래스
파괴
자�
기초
클래
스파
괴자
멤버
멤버
멤버
멤버
초기
자초
기자
초기
자초
기자
리스
트리
스트
리스
트리
스트
#in
clu
de <
iostream
>usin
g n
am
espace s
td;
cla
ss T
est
{ priva
te:
int m
_first;
int m
_second;
// 순
서가
중요
public
:Test(
int a)
: m
_first(
a),
m_s
econd(m
_first*
2)
{ }
frie
nd o
stream
& o
pera
tor<
<(o
stream
& o
s, const Test &
t)
{re
turn
os <
< "
firs
t="
<< t.m
_first << "
, second="
<< t.m
_second;
}}; vo
id m
ain
(){
Test t(
4);
cout << t <
< e
ndl;
} �초
기화
리스
트의
초기
식들
은리
스트
에나
타난
순서
가아
니라
멤버
의선
언순
서대
로실
행�
m_f
irst와
m_s
econd
의위
치를
바꾸
면부
작용
이발
생함
Public
Public
Public
Public
상속
인상
속인
상속
인상
속인
경우
경우
경우
경우–
파생
파생
파생
파생
클래
스와
클래
스와
클래
스와
클래
스와
기초
기초
기초
기초
클래
스와
의클
래스
와의
클래
스와
의클
래스
와의
관계
관계
관계
관계
(812
(812
(812
(812쪽 쪽쪽쪽
) )))
�기
초클
래스
의priva
te 아
닌멤
버를
사용
�기
초클
래스
포인
터는
파생
클래
스지
시가
능�
기초
클래
스참
조는
파생
클래
스참
조가
능�
기초
클래
스포
인터
나참
조는
기초
클래
스메
쏘드
만호
출가
능�
파생
클래
스참
조나
포인
터는
기초
클래
스를
지칭
할수
없음
�기
초클
래스
참조
와포
인터
를전
달인
자로
사용
하는
함수
�파
생클
래스
객체
도사
용가
능�
기초
클래
스객
체를
파생
클래
스객
체로
초기
화할
수있
음�
파생
클래
스객
체를
기초
클래
스에
대입
가능
상속
상속
상속
상속
(is
(is
(is
(is- ---a
a
a
a 관
계관
계관
계관
계),
),
),
),
컴포
지션
컴포
지션
컴포
지션
컴포
지션
(has
(has
(has
(has- ---a
a
a
a 관
계관
계관
계관
계) )))
�814 쪽
�바
나나
는과
일이
지만
(is-a),
점심
은바
나나
를가
지고
있다
(has-a).
�Lunch 클
래스
의한
데이
터멤
버로
Fru
it 객
체를
포함
시킨
다.
�Arr
ay
클래
스로
부터
Sta
ck
클래
스를
파생
시키
지말
고,
Sta
ck
클래
스안
에Arr
ay
객체
를넣
는다
. (is-im
ple
mente
d-as-a)
다형
성다
형성
다형
성다
형성
– –––C
++
C++
C++
C++
�para
metric
poly
morp
his
m -
템플
리트
�subty
pe p
oly
morp
his
m –
가상
함수
, 오
버라
이딩
�ad-hoc p
oly
morp
his
m –
오버
로딩
public
public
public
public
다형
다형
다형
다형
상속
상속
상속
상속
(816
(816
(816
(816쪽 쪽쪽쪽
) )))
�호
출하
는객
체마
다메
쏘드
의행
동이
다른
것
–오
버라
이딩
(subty
pe p
oly
morp
his
m)
�방
법
–기
초클
래스
메쏘
드를
다시
정의
(ove
rrid
ing)
–820쪽
코드
–가
상메
쏘드
(가상
함수
)를사
용–
821쪽
코드
�가
상파
괴자
–올
바른
순서
로파
괴자
가호
출되
게함
(833,8
40 쪽
)
어떻
게어
떻게
어떻
게어
떻게
상위
상위
상위
상위
클래
스클
래스
클래
스클
래스
객체
의객
체의
객체
의객
체의
메쏘
드를
메쏘
드를
메쏘
드를
메쏘
드를
실행
실행
실행
실행
하는
가하
는가
하는
가하
는가
? (
826
? (
826
? (
826
? (
826쪽 쪽쪽쪽
) )))
�기
초클
래스
메쏘
드를
재정
의한
경우
–B
rass::
Vie
wAcct(
); /
/ 기
초부
분을
출력
(826쪽
)
�기
초클
래스
메쏘
드를
재정
의하
지않
은경
우
–B
ala
nce()
; //
(827쪽
)
�Ja
va –
super.
view
Acct(
);
단순
단순
단순
단순
대입
대입
대입
대입
Bra
ss P
iggy(
"Porc
elo
t Pig
g",
381299, 4000.0
0);
Bra
ssPlu
s H
oggy(
"Hora
tio H
ogg",
382288,
3000.0
0);
Bra
ssPlu
s d
dd;
ddd =
Pig
gy;
// 적
당한
생성
자가
있으
므로
ok
Rate
dPla
yer
rp;
Table
Tennis
Pla
yer
ttp
= r
p;
// 생
성자
없으
므로
에러
Bra
ssPlu
s*
eee =
&Pig
gy;
// 컴
파일
에러
Bra
ssPlu
s*
eee =
(B
rassPlu
s*)
&Pig
gy;
eee->Vie
wAcct(
);//
실행
에러
의소
지다
분함
대입
대입
대입
대입
, , , , 참
조참
조참
조참
조, , , , 포
인터
포인
터포
인터
포인
터코
딩코
딩코
딩코
딩실
험실
험실
험실
험
Bra
ss P
iggy(
"Porc
elo
t Pig
g",
381299,
4000.0
0);
Bra
ssPlu
s H
oggy(
"Hora
tio H
ogg",
382288, 3000.0
0);
Pig
gy.
Vie
wAcct(
);cout << e
ndl;
Hoggy.
Vie
wAcct(
);cout << e
ndl;
Bra
ss a
aa(P
iggy)
;//
대입
aaa.V
iew
Acct(
);cout << e
ndl;
aaa
= H
oggy;
// 나
중에
Bra
ss a
aa1(H
oggy)
;로바
꿔서
실험
aaa.V
iew
Acct(
);cout << e
ndl;
cout << e
ndl;
Bra
ss&
bbb =
Pig
gy;
// 참
조bbb.V
iew
Acct(
);cout << e
ndl;
bbb =
Hoggy;
//
나중
에B
rass&
bbb1 =
Hoggy;
로바
꿔서
실험
(429, 430쪽
)bbb.V
iew
Acct(
);cout << e
ndl;
cout << e
ndl;
Bra
ss*
ccc =
&Pig
gy;
// 포
인터
ccc->Vie
wAcct(
);cout << e
ndl;
ccc =
&H
oggy;
// 나
중에
Bra
ss*
ccc1 =
&H
oggy;
로바
꿔서
실험
ccc->Vie
wAcct(
);cout << e
ndl;
cout << e
ndl;
함수
함수
함수
함수
대입
대입
대입
대입
, , , , 함
수함
수함
수함
수참
조참
조참
조참
조, , , , 함
수함
수함
수함
수포
인터
포인
터포
인터
포인
터
void
func1(B
rass p
){
p.V
iew
Acct(
);}
void
func2(B
rass&
p)
{p.V
iew
Acct(
);}
void
func3(B
rass*
p)
{p->Vie
wAcct(
);}
Bra
ss d
dd(P
iggy)
;fu
nc1(d
dd);
Bra
ss d
dd1(H
oggy)
;fu
nc1(d
dd1);
Bra
ss&
eee =
Pig
gy;
func2(e
ee);
Bra
ss&
eee1 =
Hoggy;
func2(e
ee1);
Bra
ss*
fff
= &
Pig
gy;
func3(f
ff);
Bra
ss*
fff1
= &
Hoggy;
func3(f
ff1);
�리
스코
프대
체원
리–
Lis
kov
Substitu
tion P
rincip
le (
Barb
ara
Lis
kov)
–원
문:
서브
타입
은언
제나
기반
타입
으로
교체
할수
있어
야한
다.
–C
++ :
파생
클래
스는
언제
나기
초클
래스
로교
체할
수있
어야
한다
.–
즉,
하위
클래
스는
상위
클래
스와
호환
성을
생각
해야
한다
는것
–그
러려
면구
현은
선언
을준
수하
고하
위클
래스
는상
위클
래스
의규
약을
준수
해야
함
가상
가상
가상
가상
파괴
자가
파괴
자가
파괴
자가
파괴
자가
필요
한필
요한
필요
한필
요한
이유
이유
이유
이유
�831쪽
, 리
스팅
13.1
0 –
dele
te로
파괴
�파
괴자
가가
상이
아니
라면
포인
터형
에해
당하
는파
괴자
가호
출되
게됨
�EC
++의
규칙
7번
–다
형성
을가
진기
본클
래스
에서
는소
멸자
를반
드시
가상
소멸
자로
선언
정적
정적
정적
정적
결합
과결
합과
결합
과결
합과
동적
동적
동적
동적
결합
결합
결합
결합
�정
적결
합–
하여
간정
해진
데로
하겠
다!
–함
수이
름에
따라
어떤
코드
를실
행할
지를
컴파
일타
임에
결정
–sta
tic b
indin
g 또
는early
bin
din
g
�동
적결
합–
봐가
면서
하겠
다.
–함
수이
름에
따라
어떤
코드
를실
행할
지를
프로
그램
실행
시간
에결
정
–dyn
am
ic b
indin
g 또
는la
te b
indin
g
업 업업업캐
스팅
캐스
팅캐
스팅
캐스
팅, , , , 다
운다
운다
운다
운캐
스팅
캐스
팅캐
스팅
캐스
팅
�업
캐스
팅–
파생
클래
스의
참조
나포
인터
를기
초클
래스
의참
조나
포인
터로
변환
하는
것–
Bra
ssPlu
sx;
Bra
ss*
y = &
x; B
rass&
z =
x;
–B
rassPlu
sPlu
sxx
; B
rass*
yy= &
xx;
�다
운캐
스팅
–기
초클
래스
의참
조나
포인
터를
파생
클래
스의
참조
나포
인터
로변
환하
는것 –
명시
적인
데이
터형
변환
필요
함
–기
초클
래스
에없
는것
을참
조하
면런
타임
에러
발생
(그림
13.4
)
동적
동적
동적
동적
결합
에결
합에
결합
에결
합에
대한
대한
대한
대한
논의
들논
의들
논의
들논
의들
�동
적결
합이
더멋
져보
인다
!–
왜두
종류
의결
합이
있는
가? (
836,8
37쪽
)–
왜정
적결
합이
디폴
트인
가?
–동
적결
합은
어떻
게동
작하
는가
?
�효
율성
–동
적결
합은
실행
시간
에객
체를
결정
해야
하므
로,
정적
결합
보다
느리
다.
–상
속을
하지
않을
거라
면정
적결
합으
로충
분하
다.
–사
용하
지않
을지
모르
는기
능때
문에
미리
부담
을떠
안지
않는
다. –
비야
네스
트롭
스트
룹
�개
념모
델–
virtual 을
쓰지
않는
것으
로,
파생
클래
스에
서재
정의
되기
를원
하지
않는
메쏘
드들
은동
적결
합을
안한
다고
공공
연히
알림
�837쪽
팁�
그렇
다면
Java
의final cla
ss처
럼아
예막
을수
있는
방법
은? (
시험
문제
)�
그렇
다면
Java
의경
우,
가상
함수
는어
떻게
하면
되는
것일
까? (
역시
시험
문제
)
가상
가상
가상
가상
함수
의함
수의
함수
의함
수의
동작
동작
동작
동작
�가
상함
수테
이블
(vta
ble
) –
가상
함수
의주
소저
장(8
39쪽
)
�클
래스
에숨
겨진
멤버
–가
상함
수테
이블
의포
인터
�가
상함
수실
행순
서1.
그객
체클
래스
의vt
able
주소
획득
2.
vtable
에서
함수
주소
획득
3.
함수
실행
�자
원(메
모리
와속
도)의
부담
–클
래스
에대
해가
상함
수테
이블
–객
체마
다가
상함
수테
이블
포인
터
–테
이블
에접
근하
는단
계(indirect addre
ssin
g)
가상
가상
가상
가상
메쏘
드메
쏘드
메쏘
드메
쏘드
( (((함수
함수
함수
함수
) ) ) ) 정
리정
리정
리정
리(8
40
(840
(840
(840쪽 쪽쪽쪽
) )))
�vi
rtual 로
시작
–기
초클
래스
, 파
생클
래스
에대
해가
상메
쏘드
가됨
�포
인터
나참
조를
쓰게
되면
동적
결합
�파
상클
래스
에서
다시
정의
하고
싶은
메쏘
드는
가상
함수
로선
언하
자
�생
성자
–가
상함
수로
선언
할수
없다
�파
괴자
–상
속할
생각
이면
가상
으로
선언
해야
한다
. 디
폴트
로만
들게
하지
말고
무조
건선
언하
고정
의
함수
함수
함수
함수
오버
로딩
과오
버로
딩과
오버
로딩
과오
버로
딩과
파생
파생
파생
파생
클래
스의
클래
스의
클래
스의
클래
스의
오버
라이
오버
라이
오버
라이
오버
라이
딩 딩딩딩(8
42
(842
(842
(842쪽 쪽쪽쪽
) )))
�어
떤함
수를
파생
클래
스에
서다
시정
의하
면시
그너
처와
는무
관하
게같
은이
름을
가진
모든
함수
를가
려버
림(o
verr
ide)
�따
라서
상속
된메
쏘드
를정
의할
때는
기초
클래
스의
메쏘
드와
정확
히일
치시
켜야
혼란
이없
음�
단, 리
턴형
이기
초클
래스
의참
조나
포인
터이
면파
생클
래스
의참
조나
포인
터로
대체
됨(리
턴형
의공
변)
�또
한기
초클
래스
선언
이오
버로
딩되
어있
으면
파생
클래
스에
서는
모두
재정
의하
도록
한다
Pro
tecte
dPro
tecte
dPro
tecte
dPro
tecte
d
�파
생클
래스
에서
는접
근가
능
�이
건과
연쓸
만한
가? �
설계
자가
정한
인터
페이
스로
만데
이터
를바
꾼다
는원
칙(8
45쪽
)
�Sin
gle
ton 패
턴–
정확
하게
한개
의객
체만
만들
어서
호출
한쪽
에게
그객
체만
리턴
하게
한다
추상
화추
상화
추상
화추
상화
기초
기초
기초
기초
클래
스클
래스
클래
스클
래스
(ABC
)(A
BC
)(A
BC
)(A
BC
)
�구
현되
지않
는,
즉선
언만
하고
정의
는하
지않
는,
순수
가상
함수
를가
지고
있는
클래
스
�순
수가
상함
수는
함수
선언
뒤에
“=0”
붙임
(849쪽
) �
인터
페이
스의
개념
�왜
필요
한가
?–
원과
타원
의예
, 사
각형
과정
사각
형의
예
–B
aseElli
pse를
Circle
과Elli
pse로
상속
�B
rass와
Bra
ssPlu
s클
래스
에적
용(8
50쪽
~)
AB
C
AB
C
AB
C
AB
C 철
학철
학철
학철
학
�추
상화
기초
클래
스만
기초
클래
스가
되게
해야
한다
는주
장이
있음
(856쪽
노트
) –
Java
에서
인터
페이
스를
만드
는것
과비
슷
파생
파생
파생
파생
클래
스에
서클
래스
에서
클래
스에
서클
래스
에서
동적
동적
동적
동적
메모
리메
모리
메모
리메
모리
할당
할당
할당
할당
�첫
번째–
파생
클래
스가
new
를사
용안
함(8
56쪽
)
–파
생클
래스
에서
명시
적파
괴자
, 복
사생
성자
, 대
입연
산자
따로
구현
할필
요없
음�
기초
클래
스에
서알
아서
해줌
�두
번째–
파생
클래
스가
new
를사
용(8
58쪽
)
–파
괴자
에선
자신
이new
한것
만dele
te
–복
사생
성자
에선
기초
클래
스복
사생
성자
먼저
호출
(859
쪽중
간코
드) �
인수
는파
생클
래스
참조
를전
달해
도무
관(업
캐스
팅)
–아
무것
도쓰
지않
으면
디폴
트생
성자
자동
호출
됨
–대
입연
산자
의경
우자
기대
입점
검후
에바
로기
초클
래스
의대
입연
산자
실행
(860쪽
코드
)
파생
파생
파생
파생
클래
스에
서클
래스
에서
클래
스에
서클
래스
에서
프렌
드프
렌드
프렌
드프
렌드
함수
에함
수에
함수
에함
수에
의한
의한
의한
의한
연산
연산
연산
연산
자 자자자오
버로
딩오
버로
딩오
버로
딩오
버로
딩
�opera
tor<
<
–받
은파
생클
래스
객체
를가
지고
, 기
초클
래스
로강
제로
형변
환한
후호
출(8
65쪽
)