프로그래밍 (object oriented...

46
객체 객체 객체 객체 지향 지향 지향 지향 프로그래밍 프로그래밍 프로그래밍 프로그래밍 (Object Oriented Programming) (Object Oriented Programming) (Object Oriented Programming) (Object Oriented Programming) 14장 강사 강대기

Upload: others

Post on 27-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

객체

객체

객체

객체

지향

지향

지향

지향

프로

그래

밍프

로그

래밍

프로

그래

밍프

로그

래밍

(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)

14장

강사–

강대

Page 2: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

차례

차례

차례

차례

(Agenda)

(Agenda)

(Agenda)

(Agenda)

�has-a 관

계�

객체

멤버

를가

지는

클래

스(컨

테인

먼트

)�

vala

rray

템플

릿클

래스

�priva

te 상

속과

pro

tecte

d 상

속�

다중

상속

�가

상기

초클

래스

�클

래스

템플

릿만

들기

�클

래스

템플

릿사

용하

기�

템플

릿특

수화

Page 3: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

코드

의코

드의

코드

의코

드의

재활

용성

재활

용성

재활

용성

재활

용성

�상

속(inherita

nce)

대합

성(c

om

positio

n)

�상

속–

인터

페이

스상

속(inte

rface inherita

nce)

�is

-a 관

계�

C++ 에

서는

public

상속

–구

현상

속(im

ple

menta

tion inherita

nce)

또는

클래

스상

속�

has-a 관

계�

C++ 에

서는

priva

te 상

속,

pro

tecte

d 상

�합

성–

컴포

지션

(com

positio

n),

컨테

인먼

트(c

onta

inm

ent)

, 레

이어

링(laye

ring)

–has-a 관

�has-a 관

계는

컨테

인먼

트또

는priva

te 상

Page 4: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

Stu

dent cla

ss

Stu

dent cla

ss

Stu

dent cla

ss

Stu

dent cla

ss 의 의의의

예 예예예

�이

름–

(1)

문자

배열

, (2

) 포

인터

와동

적메

모리

할당

, (3

) strin

g 클

래스

�성

적–

(1)

고정

크기

배열

, (2

) 동

적메

모리

할당

, (3

) va

larray

클래

�va

larr

ay

클래

스(8

91쪽

) �

클래

스템

플릿

–va

larray<

int>

q_v

alu

es; //

크기

0

–va

larray<

int>

v2(8

); /

/ 크

기8

–va

larray<

int>

v3(1

0,8

); /

/ 크

기8, 초

기값

10

–va

larray<

double

> v

4(g

pa,4

); /

/ 크

기4, 초

기값

gpa

원소

–opera

tor[

](),

siz

e()

, sum

(), m

ax(

), m

in()

Page 5: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

컨테

인먼

트컨

테인

먼트

컨테

인먼

트컨

테인

먼트

: Stu

dent

: Stu

dent

: Stu

dent

: Stu

dent 클

래스

클래

스클

래스

클래

스설

계설

계설

계설

계(8

92

(892

(892

(892쪽 쪽쪽쪽

) )))

cla

ss S

tudent {

priva

te:

strin

g n

am

e;

vala

rray<double

> s

core

s;

} �구

현을

획득

하지

만,

인터

페이

스는

상속

하지

않음

! (중

요) �

구현

획득

Page 6: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

컨테

인먼

트컨

테인

먼트

컨테

인먼

트컨

테인

먼트

: Stu

dent

: Stu

dent

: Stu

dent

: Stu

dent 클

래스

클래

스클

래스

클래

스예

제예

제예

제예

제(8

94

(894

(894

(894쪽 쪽쪽쪽

) )))

�ty

pedef

–클

래스

정의

의priva

te 부

�exp

licit 키

워드

(688쪽

)

�제

한을

가하

는도

구들

은적

극적

으로

활용

(896쪽

)

�멤

버초

기자

리스

트–

객체

멤버

는상

속의

경우

기초

클래

스와

마찬

가지

로미

리생

성되

어초

기화

되어

야함

–따

라서

, 사

용하

지않

을경

우다

른멤

버객

체들

은디

폴트

생성

자로

생성

–초

기화

순서

에조

심한

�클

래스

내부

에선

내포

된객

체의

메써

드를

사용

할수

있음

�필

요하

면헬

퍼메

쏘드

를사

용(8

98쪽

)

Page 7: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

priva

te

priva

te

priva

te

priva

te 상

속상

속상

속상

속(9

03

(903

(903

(903쪽 쪽쪽쪽

) )))

�priva

te 상

속은

디폴

트상

속방

법임

�public

상속–

인터

페이

스상

�priva

te 상

속–

구현

상속

�컨

테인

먼트–

종속

객체

(subobje

ct)

의구

현획

Page 8: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

priva

te

priva

te

priva

te

priva

te 상

속상

속상

속상

속: Stu

dent

: Stu

dent

: Stu

dent

: Stu

dent 클

래스

클래

스클

래스

클래

�다

중상

속(9

04쪽

)�

priva

te 멤

버데

이터

를가

질필

요가

없음–

상속

되는

두기

초클

래스

가필

요한

데이

터멤

버들

을제

공�

기초

클래

스성

분의

초기

화–

멤버

이름

이아

닌클

래스

이름

을사

용(9

05쪽

)

�기

초클

래스

메쏘

드에

접근

–클

래스

이름

과클

래스

사용

범위

연산

자사

용(9

07쪽

)1.

Arr

ayD

B::

sum

()2.

std

::va

larr

ay<

double

>::sum

()

�기

초클

래스

객체

에접

근(9

07쪽

) –

위의

3,4

,5�

기초

클래

스프

렌드

에접

근(9

08쪽

) –

위의

3,4

,5�

priva

te 상

속에

서는

파생

클래

스에

서기

초클

래스

로의

명시

적데

이터

형변

환만

가능

함(암

시적

데이

터형

변환

은안

됨)

–public

상속

이라

도명

시적

데이

터형

변환

필요

(909쪽

참고

)

Page 9: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

컨테

인먼

트와

컨테

인먼

트와

컨테

인먼

트와

컨테

인먼

트와

priva

te

priva

te

priva

te

priva

te 상

속상

속상

속상

속비

교비

교비

교비

�Favo

r obje

ct com

positio

n o

ver cla

ss inherita

nce!

-G

oF

1.

컨테

인먼

트가

더사

용하

기쉽

다2.

다중

상속

은다

이아

몬드

구조

가되

는경

우문

제를

일으

킬소

지가

큼1.

두개

이상

의기

초클

래스

들이

같은

조상

을공

유할

경우

, 파

생클

래스

가그

조상

의다

중인

스턴

스를

가짐

2.

두개

이상

의기

초클

래스

들이

같은

이름

을가

진메

쏘드

들을

공유

3.

같은

클래

스종

속객

체들

을여

러개

내포

할수

있음

�priva

te 상

속의

(허접

한)

장점

(컨테

인먼

트에

대한

)1.

pro

tecte

d 멤

버를

사용

할수

있음

2.

가상

멤버

함수

를다

시정

의할

수있

�pro

tecte

d 상

속–

priva

te 상

속의

변종

–915쪽

의<표

14.1

>

Page 10: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

usin

gusin

gusin

gusin

g을 을을을

사용

하여

사용

하여

사용

하여

사용

하여

접근

을접

근을

접근

을접

근을

다시

다시

다시

다시

정의

정의

정의

정의

�priva

te/p

rote

cte

d 상

속을

하고

나서

, 기

초클

래스

들의

특정

메쏘

드들

을public

으로

하려

면?

1.

public

파생

클래

스메

쏘드

를새

로정

2.

usin

g 선

언사

용(9

16쪽

)

3.

구식

방법

: public

으로

다시

선언

–원

래의

의도

를퇴

색시

Page 11: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

다중

다중

다중

다중

상속

상속

상속

상속

�문

제점

1.

서로

다른

두기

초클

래스

들에

서이

름은

같지

만서

로다

른메

쏘드

를상

속하

는문

제2.

같은

조상

클래

스를

가지

는서

로다

른두

기초

클래

스들

에게

서다

중인

스턴

스를

상속

받는

문제

�다

중상

속을

반대

하는

사람

들이

더많

음�

다중

상속

이들

어맞

는경

우–

템플

릿–

Polic

y-based p

rogra

mm

ing

�Ja

va –

클래

스의

다중

상속

안됨

–Ja

va에

서는

어떻

게다

중상

속을

흉내

낼수

있는

가? (

시험

문제

)

�클

래스

구조

-W

ork

er(

조부

모),

Waiter(

부모

), S

inger(

부모

), S

ingin

gW

aiter(

자식

)

Page 12: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

조부

모조

부모

조부

모조

부모

클래

스의

클래

스의

클래

스의

클래

스의

다중

다중

다중

다중

인스

턴스

인스

턴스

인스

턴스

인스

턴스

(923

(923

(923

(923쪽 쪽쪽쪽

) )))

�두

개의

Work

er

성분–

924쪽

의표

14.4

�모

호성–

(923쪽

)

Sin

gin

gW

aiter

ed;

Work

er*

pw

= &

ed;

–강

제데

이터

형변

환으

로해

결�

다형

성을

해침

�해

결책

은가

상기

초클

래스

cla

ss S

inger

: vi

rtual public

Work

er

{};

cla

ss W

aiter

: vi

rtual public

Work

er

{};

Page 13: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스클

래스

클래

스클

래스

(924

(924

(924

(924쪽 쪽쪽쪽

) )))

�하

나의

공통

조상

을공

유하

는여

러개

의기

초클

래스

로부

터공

통조

상의

유일

객체

를상

속받

는방

�조

상객

체는

하나

만가

–그

림14.4

(924쪽

) 및

그림

14.5

(925쪽

) 참

�이

시점

에서

의문

점들

1.

왜가

상이

냐?

2.

처음

부터

디폴

트로

가상

이면

안되

냐?

3.

가상

기초

클래

스를

쓰려

면뭘

해야

하나

?

Page 14: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스클

래스

클래

스클

래스

의문

점의

문점

의문

점의

문점

해결

해결

해결

해결

! !!!

�왜

가상

이라

고하

냐?

–별

의미

없음

.

–새

로운

키워

드를

추가

하기

힘들

–일

종의

키워

드오

버로

딩!

�왜

가상

기초

클래

스가

디폴

트가

아닌

가?

–여

러벌

의복

사본

을원

하는

경우

가있

–가

상기

초가

디폴

트이

려면

추가

작업

이필

요함

–모

호성

�조

상클

래스

의생

성자

를명

시적

으로

호출

해야

�메

쏘드

사용

의모

호성

이존

재함

Page 15: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스클

래스

클래

스클

래스

의문

점의

문점

의문

점의

문점

해결

해결

해결

해결

! !!!

�가

상기

초클

래스

를쓰

려면

뭐를

해야

하나

?

–vi

rtual 키

워드

추가

–기

존코

드들

의변

Page 16: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스의

클래

스의

클래

스의

클래

스의

생성

자생

성자

생성

자생

성자

규칙

규칙

규칙

규칙

Sin

gin

gW

aiter

(const W

ork

er

& w

k,�

) :

Waiter(

wk,

p),

Sin

ger(

wk,

v) {

}

�정

보의

전달

이두

개의

다른

경로

를거

친다

!

�가

상이

아닌

경우

, 각

각의

카피

로가

지만

, 가

상이

라면

문제

가됨

�해

결책

: 명

시적

으로

조상

생성

자도

호출

Sin

gin

gW

aiter

(const W

ork

er

& w

k,�

) :

Work

er(

wk)

, W

aiter(

wk,

p),

Sin

ger(

wk,

v) {

}

Page 17: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

메쏘

드메

쏘드

메쏘

드메

쏘드

사용

의사

용의

사용

의사

용의

모호

성모

호성

모호

성모

호성

(928

(928

(928

(928쪽 쪽쪽쪽

) )))

�Sin

gin

gW

aiter

new

hire(�

);

�new

hire.S

how

();

// 모

호함

�new

hire.S

inger:

:Show

();

// 해

�점

층적

접근

방식

은문

제가

됨(9

29쪽

)–�

priva

te 헬

퍼메

쏘드

를통

한모

듈접

근방

식을

사용

(930쪽

)

Page 18: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스와

클래

스와

클래

스와

클래

스와

가상

이가

상이

가상

이가

상이

아닌

아닌

아닌

아닌

기초

기초

기초

기초

클래

클래

클래

클래

스의

스의

스의

스의

혼합

혼합

혼합

혼합

�다

음과

같은

경우

–클

래스

M은

C,D

에대

해서

는클

래스

B의

종속

객체

하나

만내

–클

래스

M은

X,Y

에대

해각

각별

개의

클래

스B

의종

속객

체들

을내

�모

든가

상경

로에

대해

서는

하나

의클

래스

객체

, 그

렇지

않으

면별

개의

기초

클래

스종

속객

체들

을내

포함

Page 19: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스의

클래

스의

클래

스의

클래

스의

비교

비교

비교

비교

우위

우위

우위

우위

(dom

inance)

(dom

inance)

(dom

inance)

(dom

inance)

( (((참고

참고

참고

참고

: 842

: 842

: 842

: 842쪽 쪽쪽쪽

오버

로딩

오버

로딩

오버

로딩

오버

로딩

대 대대대오

버라

이딩

오버

라이

딩오

버라

이딩

오버

라이

딩) )))

�가

상이

아닌

클래

스의

경우

모호

함�

가상

클래

스인

경우

모호

할수

도있

고,

비교

우위

에의

해모

호하

지않

을수

도있

�파

생클

래스

의이

름은

조상

클래

스보

다비

교우

위를

가짐

Page 20: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

가상

가상

가상

가상

기초

기초

기초

기초

클래

스의

클래

스의

클래

스의

클래

스의

비교

비교

비교

비교

우위

우위

우위

우위

(dom

inance)

(dom

inance)

(dom

inance)

(dom

inance)

�클

래스

C가

B에

서파

생되

었으

므로

, 클

래스

C의

q()

정의

가클

래스

B의

q()

정의

보다

비교

우위

를가

짐�

F의

메쏘

드들

은C

::q()

를q()

라고

할수

있음

�C

와E는

서로

상대

에대

해기

초클

래스

가아

니므

로,

om

b()

정의

들은

서로

비교

우위

를가

지지

않음

�F에

서om

b()

를하

면모

호해

�가

상모

호성

은접

근규

칙은

고려

하지

않음

�E

의om

b()

가priva

te 이

라고

해도

여전

히om

b()

의사

용은

모호

Page 21: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

클래

스클

래스

클래

스클

래스

템플

릿템

플릿

템플

릿템

플릿

(942

(942

(942

(942쪽 쪽쪽쪽

) )))

�예

를들

면데

이터

형과

무관

한형

식으

로스

택을

정의

할수

있는

가?

�ty

pedef?

–943쪽

–ty

pedef

unsig

ned long Ite

m;

–단

점1 –

데이

터변

경할

때마

다헤

더파

일수

–단

점2 –

프로

그램

당,

한종

류의

스택

만생

�C

++의

해결

책–

클래

스템

플릿

Page 22: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

일단

일단

일단

일단

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

(466

(466

(466

(466쪽 쪽쪽쪽

) )))

�템

플릿

은함

수가

아니

며무

조건

인라

인함

수가

되는

것도

아님

�Sw

ap 함

수의

템플

릿예

tem

pla

te <

typenam

eT>

void

Sw

ap (

T &

a,

T &

b)

{

T tem

p =

a;

a =

b;

b =

tem

p;

} �위

의선

언을

했다

고해

도아

직함

수가

생긴

게아

Page 23: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

계속

계속

계속

계속

�특

수화

(specia

lization)

–템

플릿

은추

상이

다. 따

라서

코드

로실

행하

려면

특수

한예

를이

끌어

내야

한다

.

�암

시적

구체

화, 명

시적

구체

화,

명시

적특

수화

–구

체화

또는

인스

턴스

화(insta

ntiation)

또는

암시

적특

수화

�템

플릿

은함

수가

아니

다.

템플

릿으

로부

터함

수를

만들

어내

야한

다.

�암

시적

구체

화–

마치

있었

던거

처럼

자연

스럽

게요

구함

�명

시적

구체

화–

대놓

고요

청함

. 라

이브

러리

만들

때좋

–명

시적

특수

화(e

xplic

it s

pecia

lization)

�템

플릿

에서

지정

한방

법과

는다

른특

수한

예외

를만

들고

싶다

Page 24: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

계속

계속

계속

계속

�암

시적

구체

화(im

plic

it insta

ntiation)

–코

드를

만들

라는

명시

적인

선언

이나

실행

이없

다. 다

만이

미만

들었

겠거

니하

고내

부적

으로

돌아

갈뿐

(468쪽

과471

쪽코

드)

–469쪽

의Sw

ap(i,j)

는Sw

ap<in

t>(i,j)

와동

일함

�명

시적

구체

화(e

xplic

it insta

ntiation)

–프

로그

램내

부에

서선

언해

서구

체적

인코

드를

만들

라고

명한

다. (4

79쪽

)–

예: te

mpla

te v

oid

Sw

ap<in

t>(int&

, in

t&

);

�명

시적

특수

화(e

xplic

it s

pecia

lization)

–템

플리

트의

특수

한경

우를

만들

고자

한다

(475쪽

코드

)–

예: te

mpla

te <

> v

oid

Sw

ap<in

t>(int&

, in

t&

);–

예: te

mpla

te <

> v

oid

Sw

ap(int&

, in

t&);

Page 25: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

계속

계속

계속

계속

�템

플릿

도오

버로

딩된

다(4

71쪽

)

�따

라서

함수

이름

이하

나주

어지

면(4

74쪽

)–

템플

릿이

아닌

그냥

함수

, 템

플릿

함수

(실은

암시

적특

수화

함수

), 명

시적

특수

화함

–그

리고

이것

들의

오버

로딩

버전

들이

존재

할수

있음

�가

장적

합한

버전

을찾

는것

을–

오버

로딩

분석

(ove

rloadin

g r

esolu

tion)이

라고

–일

반적

으로

가장

특수

화된

경우

를찾

Page 26: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

클래

스클

래스

클래

스클

래스

템플

릿템

플릿

템플

릿템

플릿

�예

를들

면데

이터

형과

무관

한형

식으

로스

택을

정의

할수

있는

가?

�템

플릿–

매개

변수

화되

는데

이터

형제

�예

: Q

ueue에

int를

전달

하여

int의

Queue 생

성,

vala

rray

템플

릿클

래스

�클

래스

템플

릿정

의(9

45쪽

)–

tem

pla

te <

typenam

eT> 로

시작

–데

이터

형�

T

–te

mpla

te <

typenam

eT> b

oolSta

ck<

T>::push(c

onstT&

item

)

�템

플릿

선언

과함

수를

분리

시키

고싶

다면

, exp

ort

Page 27: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

포인

터들

의포

인터

들의

포인

터들

의포

인터

들의

스택

스택

스택

스택

템플

릿템

플릿

템플

릿템

플릿

�Sta

ck<

char

*> s

t를

적용

하는

경우

, 잘

못된

응용

(951쪽

)–

strin

g p

o; �

char*

po;

�포

인터

만있

지저

장공

간없

음�

실행

시간

에러

–strin

g p

o; �

char

po[4

0];

�pop 메

쏘드

와안

맞음

�배

열이

름에

대입

안되

므로

컴파

일에

–strin

g p

o; �

char*

po

= n

ew

char[

40];

�po

주소

는바

뀌지

않고

스택

에들

어감

�로

직에

�올

바른

사용

�호

출한

프로

그램

이포

인터

들의

배열

을제

공하

는것

Page 28: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

포인

터들

의포

인터

들의

포인

터들

의포

인터

들의

스택

스택

스택

스택

템플

릿템

플릿

템플

릿템

플릿

�원

래스

택–

945쪽

�바

뀐스

택(9

53쪽

)–

동적

메모

리할

당으

로포

인터

들의

배열

을할

당함

�제

대로

된사

용예–

956쪽

Page 29: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

배열

배열

배열

배열

템플

릿템

플릿

템플

릿템

플릿

예제

와예

제와

예제

와예

제와

데이

터데

이터

데이

터데

이터

형이

형이

형이

형이

아닌

아닌

아닌

아닌

전달

전달

전달

전달

인자

인자

인자

인자

�컨

테이

너클

래스–

객체

들을

담기

위한

클래

스–

템플

릿은

다양

한데

이터

형이

매개

변수

로사

용된

다는

점에

서컨

테이

너클

래스

와잘

맞아

떨어

–컨

테이

너클

래스

들을

위해

재활

용하

기위

한코

드를

만들

자는

게템

플릿

을도

입한

동기

�배

열템

플릿

예제–

958쪽

–te

mpla

te <

cla

ss T

, in

tn>

–T는

데이

터형

, n은

숫자

(수식

전달

인자

)

–Arr

ayT

P<double

, 12> e

ggw

eig

hts

;

�수

식전

달인

자double

형은

허용

안됨

Page 30: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

수식

수식

수식

수식

전달

전달

전달

전달

인자

인자

인자

인자

�정

수형

, 열

거형

, 참

조, 포

인터

허용

됨–

double

& rm

, double

* pm

�double

형은

허용

안됨

–double

m; //

안됨

�템

플릿

코드

는수

식전

달인

자값

을변

경하

거나

그주

소를

얻을

수는

없음

–n++, &

n 등

은허

용안

–템

플릿

을구

체화

할때

, 수

식전

달인

자의

값은

상수

이어

야함

�생

성자

접근

방식–

힙메

모리

�수

식전

달인

자–

스택–

크기

가작

은배

열이

면더

빠름

Page 31: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

수식

수식

수식

수식

전달

전달

전달

전달

인자

인자

인자

인자

�가

장큰

단점

–각

배열

크기

가자

신만

의템

플릿

을각

각생

–Arr

ayT

P<double

, 12> e

ggw

eig

hts

;

–Arr

ayT

P<double

, 13> d

onuts

;

–Sta

ck<

int>

eggs(1

2);

–Sta

ck<

int>

dunke

rs(1

3);

�생

성자

접근

방식

은배

열크

기를

클래

스멤

버로

저장

하므

로더

융통

성이

있음

Page 32: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

템플

릿의

템플

릿의

템플

릿의

템플

릿의

융통

성과

융통

성과

융통

성과

융통

성과

재귀

적재

귀적

재귀

적재

귀적

사용

사용

사용

사용

�템

플릿

은–

기초

클래

스가

될수

도있

–성

분클

래스

가될

수도

있고

–다

른템

플릿

의데

이터

형매

개변

수가

될수

도있

�배

열템

플릿

으로

배열

원소

들이

하나

의스

택템

플릿

을이

루는

스택

템플

릿을

만들

고, 다

시배

열템

플릿

으로

스택

템플

릿의

배열

생성

(961쪽

)–

Array

< S

tack<

int>

> a

si; /

/ > >

로>>와

구별

�템

플릿

의재

귀적

사용–

962 쪽

–ArrayT

P< A

rrayT

P<in

t, 5

> , 1

0 >

tw

odee;

–in

ttw

odee[1

0][

5];

와동

Page 33: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

하나

하나

하나

하나

이상

의이

상의

이상

의이

상의

데이

터데

이터

데이

터데

이터

형 형형형매

개매

개매

개매

개변

수변

수변

수변

수, , , , 그

리고

그리

고그

리고

그리

고디

폴트

디폴

트디

폴트

디폴

트데

이터

데이

터데

이터

데이

터형 형형형

매개

매개

매개

매개

변수

변수

변수

변수

�하

나이

상의

데이

터형

매개

변수–

962 쪽

–Pair<strin

g,

int>

�디

폴트

데이

터형

매개

변수

–te

mpla

te<cla

ss T

1,

cla

ss T

2=in

t> c

lass T

opo�

–Topo<double

, double

> m

1;

–Topo<double

> m

2;

// T

opo<double

, in

t> m

2;

–클

래스

템플

릿데

이터

형매

개변

수–

디폴

트값

가능

–함

수템

플릿

데이

터형

매개

변수–

디폴

트값

불가

–데

이터

형아

닌매

개변

수–

디폴

트값

가능

Page 34: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

템플

릿템

플릿

템플

릿템

플릿

특수

화특

수화

특수

화특

수화

�암

시적

구체

–사

용하

기를

원하

는데

이터

형을

나타

내는

객체

를선

언(예

: ArrayT

P<in

t,100> s

tuff

;)

–객

체가

요구

될때

까지

암시

적구

체화

를미

룸�

ArrayT

P<double

, 30> *

pt; /

/ 아

직아

�pt = n

ew

ArrayT

P<double

, 30>; //

암시

적구

체화

!

�명

시적

구체

화–

클래

스선

언�

tem

pla

te c

lass A

rrayT

P<strin

g, 100>;

�명

시적

특수

화–

다음

슬라

이드

Page 35: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

명시

적명

시적

명시

적명

시적

특수

화특

수화

특수

화특

수화

�템

플릿

이특

정형

에맞

게구

체화

될때

, 조

금다

르게

행동

하도

록수

정–

tem

pla

te<cla

ss T

> c

lass S

ortedArr

ay

{ �

}

–T::

opera

tor>

() 메

소드

는T가

char*

인경

우다

르게

동작

함–

tem

pla

te<> c

lass S

ortedArr

ay<

char*

> {�

}

�부

분적

인특

수화

–템

플릿

의포

괄성

을일

부제

한하

는것

을말

–예�

데이

터형

매개

변수

중어

느하

나에

구체

적데

이터

형제

�포

인터

들을

위한

특별

한버

전제

Page 36: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

부분

적인

부분

적인

부분

적인

부분

적인

특수

화특

수화

특수

화특

수화

�데

이터

형매

개변

수중

어느

하나

에구

체적

데이

터형

제공

–포

괄적

인경

우�

tem

pla

te<cla

ss T

1,

cla

ss T

2> c

lass P

air {�

};

–부

분적

인특

수화

�te

mpla

te<cla

ss T

1> c

lass P

air<T1, in

t> {�

};

–명

시적

특수

화�

tem

pla

te<> c

lass P

air<in

t, int>

{�

};

�사

용예

–Pair <

double

, double

> p

1; //

포괄

적인

경우

–Pair <

double

, in

t> p

2; //

부분

적인

특수

–Pair <

int, int>

p3; //

명시

적특

수화

Page 37: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

부분

적인

부분

적인

부분

적인

부분

적인

특수

화특

수화

특수

화특

수화

�포

인터

들을

위한

특별

한버

전제

–포

괄적

인버

전�

tem

pla

te<cla

ss T

> c

lass F

eeb

{�

};

–부

분적

인특

수화

�te

mpla

te<cla

ss T

*> c

lass F

eeb

{�

};

�사

용예

–Feeb<char>

fb1;

// 포

괄적

버전

, T는

char

–Feeb<char

*> f

b2;

// 부

분적

특수

화,

T는

char

Page 38: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

부분

적인

부분

적인

부분

적인

부분

적인

특수

화특

수화

특수

화특

수화

�다

양한

제한

허용

–포

괄적

인버

�te

mpla

te<cla

ss T

1,c

lass T

2,

cla

ss T

3> c

lass T

rio {�

};

–T3를

T2로

설정

하는

특수

�te

mpla

te<cla

ss T

1,c

lass T

2> c

lass T

rio<T1,T

2,T

2> {�

};

–T3와

T2를

T1*로

설정

하는

특수

�te

mpla

te<cla

ss T

1> c

lass T

rio<T1,T

1*,

T1*> {�

};

�사

용예

–Trio<in

t, s

hort,

char *>

t1; //

포괄

적버

–Trio<in

t, s

hort> t2; //

Trio<T1,T

2,T

2>

–Trio<char,

char*

,char*

> t3; //

Trio<T1,T

1*,

T1*>

Page 39: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

멤버

멤버

멤버

멤버

템플

릿템

플릿

템플

릿템

플릿

�템

플릿

은구

조체

, 클

래스

, 템

플릿

클래

스의

멤버

가될

수있

음–

STL에

서요

구됨

�970쪽

예제

–내

포된

템플

릿클

래스

멤버

Page 40: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

매개

변수

매개

변수

매개

변수

매개

변수

템플

릿템

플릿

템플

릿템

플릿

�템

플릿

의매

개변

수는

–데

이터

형매

개변

수, 데

이터

형이

아닌

매개

변수

, 그

리고

템플

릿매

개변

수를

가질

수있

�974쪽

예제

–te

mpla

te <

tem

pla

te<ty

penam

eT> c

lass T

hin

g> c

lass C

rab

{�};

–C

rab<Kin

g> legs; 를

선언

하면

�Thin

g<in

t>가

Kin

g<in

t>로

�Thin

g<double

>이

Kin

g<double

>로

바뀜

–C

rab<Sta

ck>

nebula

; 를

선언

하면

�Thin

g<in

t>가

Sta

ck<

int>

�Thin

g<double

>이

Sta

ck<

double

>로

바뀜

Page 41: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

매개

변수

매개

변수

매개

변수

매개

변수

템플

릿템

플릿

템플

릿템

플릿

�일

반매

개변

수와

혼합

가능

�사

용예

–te

mpla

te <

tem

pla

te<ty

penam

eT> c

lass T

hin

g,

typenam

eU

, ty

penam

eV> c

lass C

rab {�

};

–C

rab<Sta

ck,

int, d

ouble

> n

ebula

;

Page 42: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

템플

릿템

플릿

템플

릿템

플릿

클래

스와

클래

스와

클래

스와

클래

스와

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

�템

플릿

의프

렌드

는세

가지

가있

–템

플릿

이아

닌프

렌드

–바

운드

템플

릿프

렌드–

클래

스가

구체

화될

때,

클래

스의

데이

터형

에의

해프

렌드

의데

이터

형이

결정

–언

바운

드템

플릿

프렌

드–

프렌

드의

모든

특수

가그

클래

스의

각특

수화

에대

해프

렌드

들임

Page 43: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

템플

릿이

템플

릿이

템플

릿이

템플

릿이

아닌

아닌

아닌

아닌

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

tem

pla

te <

cla

ss T

>

cla

ss H

asFriend

{

frie

nd v

oid

counts

();

// 모

든H

asFriend

구체

화에

대한

프렌

드함

} void

counts

() {�

}

�counts

()는

HasFriend<in

t> 클

래스

에대

해서

도프

렌드

이고

, H

asFriend<double

> 클

래스

에대

해서

도프

렌드

Page 44: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

바운

드바

운드

바운

드바

운드

템플

릿템

플릿

템플

릿템

플릿

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

tem

pla

te <

cla

ss T

>

cla

ss H

asFriend

{ frie

nd v

oid

report(H

asFriend<T> &

); /

/ 바

운드

템플

릿프

렌드

함수

} void

report(H

asFriend<in

t> &

hf)

{�

}

void

report(H

asFriend<double

> &

hf)

{�

}

�위

의두

report는

HasFriend의

각각

의특

수화

에대

한프

렌드

로,

사용

되는

모든

특수

화에

대해

정의

해주

어야

Page 45: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

템플

릿템

플릿

템플

릿템

플릿

클래

스의

클래

스의

클래

스의

클래

스의

특수

화에

특수

화에

특수

화에

특수

화에

따라

따라

따라

따라

자동

으로

자동

으로

자동

으로

자동

으로

프렌

드프

렌드

프렌

드프

렌드

함수

가함

수가

함수

가함

수가

나오

게나

오게

나오

게나

오게

하는

하는

하는

하는

법 법법법

�프

렌드

함수

들을

함수

템플

릿으

로만

들어

바운

드템

플릿

프렌

드로

설정

하면

클래

스템

플릿

과일

체화

가됨

(981 쪽

)

1.

클래

스정

의앞

에템

플릿

함수

선언

�te

mpla

te <

typenam

eT> v

oid

counts

();

�te

mpla

te <

typenam

eT> v

oid

report(T

&);

2.

템플

릿안

에서

함수

템플

릿들

을프

렌드

로선

언�

frie

nd v

oid

counts

<TT>()

;

�fr

iend v

oid

report<>(H

asFriendT<TT> &

);�

or

frie

nd v

oid

report< H

asFriendT<TT> >

(HasFriendT<TT> &

);

3.

그프

렌드

선언

에대

한함

수템

플릿

정의

제공

4.

사용

예�

counts

<in

t>()

; counts

(double

)();

�re

port(h

fi2);

//

또는

report< H

asFriendT<in

t> >

(hfi2);

Page 46: 프로그래밍 (Object Oriented Programming)kowon.dongseo.ac.kr/~dkkang/OOP2008Spring/Chap14-OOP.pdf · Student class Student class 의 의의예 예 이름 – (1) 문자 배열,

언바

운드

언바

운드

언바

운드

언바

운드

템플

릿템

플릿

템플

릿템

플릿

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

�프

렌드

템플

릿데

이터

형매

개변

수들

이템

플릿

클래

스데

이터

형매

개변

수들

과다

름(9

84쪽

)te

mpla

te <

typenam

eT>

cla

ss M

anyF

riend

{te

mpla

te <

typenam

eC

, ty

penam

eD

> f

riend v

oid

show

2(C

&,

D&

);} �

사용

예–

show

2(h

fi1, hfi2);

�show

2<M

anyF

riend<in

t>,

ManyF

riend<in

t> >

(hfi1,h

fi2);

–show

2(h

fdb, hfi2);

�show

2<M

anyF

riend<double

>,

ManyF

riend<in

t>> (

hfd

b,

hfi2);