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

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

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

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