20. [C++] ํด๋ž˜์Šค ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ

2019. 6. 12. 11:49ใ†PROGRAMMING/C & C++

 

1. ์˜ค๋ฒ„๋ผ์ด๋”ฉ (overriding)

 

๋ถ€๋ชจ์˜ ๋ฉ”์†Œ๋“œ(๋ฉค๋ฒ„ ํ•จ์ˆ˜)๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—๊ฒŒ ๋˜‘๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ์ฒด์— ๋”ฐ๋ผ ์žฌ์ •์˜ ํ•œ๋‹ค.

(๋ชฉ์  - ํ•จ์ˆ˜ ์žฌ์ •์˜, ๋‹คํ˜•์„ฑ.)

 

(์˜ค๋ฒ„๋กœ๋”ฉ : ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ์ธ์ž์— ๋”ฐ๋ผ ์žฌ์ •์˜

๋ชฉ์  - ํ•จ์ˆ˜ ์žฌ์ •์˜)

 

  ์˜ค๋ฒ„๋กœ๋”ฉ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
๋ฌธ ๋ฒ• ํ•จ์ˆ˜ ๋ฌธ๋ฒ• ํด๋ž˜์Šค ๋ฌธ๋ฒ•
ํ•จ์ˆ˜ ๋ช… ๊ฐ™์•„์•ผ ์žฌ์ •์˜ ๋ถ€๋ชจ์˜ ๊ฒƒ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
์ธ์ž ํƒ€์ž… ๋‹ฌ๋ผ์•ผ ์žฌ์ •์˜ ๋ถ€๋ชจ์˜ ๊ฒƒ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
์ธ์ž ๊ฐœ์ˆ˜ ๋‹ฌ๋ผ์•ผ ์žฌ์ •์˜ ๋ถ€๋ชจ์˜ ๊ฒƒ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
๋ฐ˜ํ™˜ ํƒ€์ž… ์žฌ์ •์˜์™€ ์•„๋ฌด ์—ฐ๊ด€ ์—†๋‹ค. ๋ถ€๋ชจ์˜ ๊ฒƒ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
๋ชฉ ์  ํ•จ์ˆ˜ ์žฌ์ •์˜์™€ ๋‹คํ˜•์„ฑ 

 

 

 

๋ชฌ์Šคํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ์†๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

 

 

 

 

 

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด์„œ ๊ฐ ๊ฐ์ฒด๋ณ„๋กœ

๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ์žฌ์ •์˜ ๋œ๋‹ค.

(ํด๋ž˜์Šค์˜ ๋‹คํ˜•์„ฑ : ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.)

 

 

 

 


 

 

 

 

2. ๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ ๊ฐ์ฒด ๋ ˆํผ๋Ÿฐ์Šค

 

๋ถ€๋ชจ ํƒ€์ž…์˜ ํฌ์ธํ„ฐ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ์ž์‹ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํฌ์ธํ„ฐ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค ์—ฐ์‚ฐ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํฌ์ธํ„ฐ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค ํƒ€์ž…์œผ๋กœ๋งŒ ํŒ๋ณ„ํ•ด๋ฒ„๋ฆฐ๋‹ค.

๋”ฐ๋ผ์„œ, CGameObject์˜ Attack() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

์ด๋ฅผ ์ •์  ๋ฐ”์ธ๋”ฉ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

[ ๋ฐ”์ธ๋”ฉ ]

ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค์˜ ์„ฑ๊ฒฉ์„ ๊ฒฐ์ •์ง€์–ด ์ฃผ๋Š” ๊ฒƒ.

 

[ ์ •์  ๋ฐ”์ธ๋”ฉ ]

- ์ปดํŒŒ์ผ ์‹œ์ ์—  ๋ฐ”์ธ๋”ฉ์ด ์ผ์–ด๋‚œ๋‹ค.

- ์ปดํŒŒ์ผ ๋•Œ ํ•œ ๋ฒˆ ๊ฒฐ์ •๋œ ์„ฑ๊ฒฉ์€ ๋Ÿฐํƒ€์ž„ ๋•Œ ๋ณ€ํ•  ์ผ์ด ์—†๋‹ค.

(๋Ÿฐํƒ€์ž„ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.)

ex) ์ •์  ๋ฐฐ์—ด, ์ผ๋ฐ˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ํ˜ธ์ถœ.

 

[ ๋™์  ๋ฐ”์ธ๋”ฉ ]

- ๋Ÿฐํƒ€์ž„ ๋•Œ ๋ฐ”์ธ๋”ฉ์ด ์ผ์–ด๋‚œ๋‹ค.

- ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ๊ฒฐ์ •์„ ๋ณด๋ฅ˜ํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๋Ÿฐํƒ€์ž„ ๋•Œ ๊ฒฐ์ •ํ•œ๋‹ค.

- ๋Ÿฐํƒ€์ž„ ๋•Œ ์„ฑ๊ฒฉ์€ ์–ผ๋งˆ๋“ ์ง€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

(๋Ÿฐํƒ€์ž„ ์†๋„๊ฐ€ ๋Š๋ ค์ง€์ง€๋งŒ, ํ”„๋กœ๊ทธ๋žจ์ด ์œ ์—ฐํ•ด์ง„๋‹ค.)

ex) ๋™์  ๋ฐฐ์—ด, ๊ฐ€์ƒ ํ•จ์ˆ˜ ํ˜ธ์ถœ.

 

 

 


 

 

 

3. ๋™์  ๋ฐ”์ธ๋”ฉ์„ ์œ„ํ•œ ํ‚ค์›Œ๋“œ virtual

 

virtual ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์œผ๋ฉด,

์ปดํŒŒ์ผ ๋•Œ ๋ฐ”์ธ๋”ฉ์„ ๋ณด๋ฅ˜ํ•ด๋‘์—ˆ๋‹ค๊ฐ€

๋Ÿฐํƒ€์ž„ ๋•Œ ์‹ค์ œ ๊ฐ์ฒด ๊ธฐ์ค€์œผ๋กœ ๋ฐ”์ธ๋”ฉ์ด ์ผ์–ด๋‚œ๋‹ค.

 

 

 

virtual ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ ๊ฒฐ๊ณผ,

๋™์  ๋ฐ”์ธ๋”ฉ์ด ์ผ์–ด๋‚˜์„œ Player์˜ Attack() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค.

 

 

 

 

 

๋™์  ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด

๋ถ€๋ชจํƒ€์ž… ํฌ์ธํ„ฐ๋กœ ์ž์‹ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

(์†Œ๋ฉธ์ž์˜ ํ˜ธ์ถœ ๋˜ํ•œ ๋™์  ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. -> ๊ฐ€์ƒ ์†Œ๋ฉธ์ž)

 

 

 

 


 

 

4. ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์  

 

 

๋‹คํ˜•์„ฑ์ด ์•„๋‹ ๋•Œ๋Š” (๋ถ€๋ชจ ํƒ€์ž… ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉ X) ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

๋‹คํ˜•์„ฑ์ผ ๋•Œ(๋ถ€๋ชจํƒ€์ž… ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉ O)๋Š” ์ฝ”๋“œ๊ฐ€ ์œ ์—ฐํ•ด์ง„๋‹ค.

 

 

 


 

 

 

5. virtual์˜ ์ž‘๋™ ์›๋ฆฌ 

 

ํด๋ž˜์Šค ๋‚ด๋ถ€์— virtual ํ‚ค์›Œ๋“œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์กด์žฌํ•œ๋‹ค๋ฉด,

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ€์ƒํ•จ์ˆ˜ ํฌ์ธํ„ฐ(vfptr)์™€ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”(vftable)์„ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค.

ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ๊ฐ€์ƒํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์—๋Š” ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๊ฐ€์ƒํ•จ์ˆ˜๋“ค์˜ ์œ„์น˜ ์ •๋ณด๋“ค์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ด๋‹ค.

๊ฐ€์ƒํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”์˜ ์ฒซ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.

 

 

 

 

 


 

 

6. ์ˆœ์ˆ˜ ๊ฐ€์ƒํ•จ์ˆ˜์™€ ์ถ”์ƒ ํด๋ž˜์Šค

 

์ˆœ์ˆ˜ ๊ฐ€์ƒํ•จ์ˆ˜๋ž€

'ํ•จ์ˆ˜์˜ ๋ชธ์ฒด๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ํ•จ์ˆ˜'๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์ถ”์ƒ ํด๋ž˜์Šค๋Š”

์ˆœ์ˆ˜ ๊ฐ€์ƒํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ด๋ผ๋„ ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค.

(์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒดํ™”ํ•  ์ˆ˜ ์—†๋‹ค.)

 

์ˆœ์ˆ˜ ๊ฐ€์ƒํ•จ์ˆ˜์™€ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” ์™„์ „ํ•œ ์ถ”์ƒ์ ์ธ ์กด์žฌ๊ฐ€ ๋œ๋‹ค.

 

 

CGameObject ํด๋ž˜์Šค๋Š”

์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๊ฐ์ฒดํ™”ํ•  ์ˆ˜์—†๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

์ˆœ์ˆ˜ ๊ฐ€์ƒํ•จ์ˆ˜์™€ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ๋‹ค.

 

1. ์ž˜๋ชป๋œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋‹ค.

 

2. CGameObject์˜ Attack() ํ•จ์ˆ˜๋Š”

CPlayer์™€ CMonster์— ์ •์˜๋œ Attack() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ฒŒ ๋” ๋•๋Š”๋ฐ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ๋ฟ

์‹ค์ œ๋กœ ์‹คํ–‰์‹œํ‚ค๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ๋ฐ, ์ด๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.