CppModule 03

03

main thema : ์ƒ์†

๊ฐ ํด๋ž˜์Šค ์ฝ˜์ƒ™์€ ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ ํด๋ž˜์Šค?์ง์—…? ์ธ๋“ฏํ•จ.

ex00

๋ชฉ์  : ์ƒ์†์„ ์œ„ํ•œ Base ํด๋ž˜์Šค ClapTrap ์ƒ์„ฑ.

์ƒ์† ์ ‘๊ทผ ์ง€์‹œ์ž.

์–ด๋–ค ์ˆ˜์ค€์œผ๋กœ ์ƒ์† ๋ฐ›์„์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ์ƒ์† ์ ‘๊ทผ ์ง€์‹œ์ž์˜ ์ˆ˜์ค€๋ณด๋‹ค ๋‚ฎ์€ ์ ‘๊ทผ ์ œํ•œ์ž๋Š” ์ƒ์†์ ‘๊ทผ์ž์˜ ์ˆ˜์ค€๋งŒํผ ์ฆ๊ฐ€ํ•œ ์ƒํƒœ๋กœ ์ƒ์† ๋ฐ›๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ : public์ˆ˜์ค€ ์ƒ์†์€ ๋ถ€๋ชจํด๋ž˜์Šค ๋ฉค๋ฒ„๋“ค์„ ๊ทธ๋Œ€๋กœ ์ƒ์†๋ฐ›๋Š”๋‹ค.

ex02

๋ชฉ์  : ex02์™€ ๊ฐ™๋‹ค. ClapTrap๋ฅผ ์ƒ์†ํ•˜๋Š” FragTrap ์ƒ์„ฑ.

ex03

๋ชฉ์  : ๋‹ค์ค‘์ƒ์†์— ์˜ํ•œ ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ ํ•ด๊ฒฐ.

virtual

https://www.youtube.com/watch?v=AImBeri4pJY&list=PLDV-cCQnUlIar6Wx3rkXHs7wbfmlz34Fz&index=1

https://www.sysnet.pe.kr/2/0/11164

์–ด์ƒ˜๋ธ”๋Ÿฌ ์ •๋ฆฌ https://m.blog.naver.com/aaasssddd25/220901909436

์ƒ์†(Inheritance)

์ƒ์†์˜ ์ด์ 

  1. class relationship ์ •์˜
  2. code reuse
  3. class interface consistency : ์ผ๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
    • abstract class(๊ตฌํ˜„ ์žˆ์Œ), interface(๊ตฌํ˜„ ์—†์Œ) -> pure virtual class ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.
  4. dynamic function binding -> virtual func, virtual table๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

๊ณต๋ถ€ํ• ๋•Œ๋Š” ์ฃผ๋กœ 1, 2๋ฒˆ์„ ์ฃผ๋กœ ์ด์•ผ๊ธฐ ํ•˜์ง€๋งŒ, ์‹ค์ œ ์ƒ์†์„ ์‚ฌ์šฉํ–ˆ์„๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ์ด์ ์€ 3, 4๊ฐ€ ๊ฐ€์žฅ ํฌ๋‹ค.

์ƒ์† ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๋Ÿฐํƒ€์ž„ ๋‹คํ˜•์„ฑ

๋Ÿฐํƒ€์ž„์˜ ์ข…๋ฃŒ

(๋‚˜๋จธ์ง€ ๋‹คํ˜•์„ฑ์€ (์—ฌ๊ธฐ์„œ)[https://github.com/utilForever/modern-cpp-tutorial/blob/master/Articles/The%20Four%20Polymorphisms%20in%20C%2B%2B.md] ์ฐธ์กฐ) ๋Ÿฐํƒ€์ž„์ค‘์—

ex03.1 virtualํ‚ค์›Œ๋“œ์™€ ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”

virtualํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)๋œ ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜๋กœ ๋™์  ๋ฐ”์ธ๋”ฉ(๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •)๋œ๋‹ค. ์ด๋•Œ ๋ฐ”์ธ๋”ฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” ์—…์บ์ŠคํŒ… ์—ฌ๋ถ€์™€ ์ƒ๊ด€ ์—†์ด ๊ฐ€์žฅ ๋‚˜์ค‘์— ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ ๊ฒƒ์ด๋‹ค.

ex03.2 ๊ฐ€์ƒํ•จ์ˆ˜ ํ…Œ์ด๋ธ”

table class ์–ด๋–ค ํ•จ์ˆ˜๋กœ ๋™์  ๋ฐ”์ธ๋”ฉํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋Š” virtual tables(์ดํ•˜ vt)์ด๋ผ๋Š” ๊ณต๊ฐ„์— ์ €์žฅ๋œ๋‹ค. vt๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฐ”๋กœ ์•ž์— ์œ„์น˜ํ•˜๋ฉฐ, ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์— vt๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ vt์— ์žˆ์œผ๋ฉด table์ด ๊ฐ€๋ฅดํ‚ค๋Š” ๊ณณ์˜ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐ(bind)ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ(์˜ค๋ฒ„ํ—ค๋“œ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, virtual์„ ๋‚จ๋ฐœํ•˜๋Š”๊ฑด ์ข‹์ง€ ์•Š๋‹ค.

ex03.3 ๋‹ค์ค‘ ์ƒ์†๊ณผ ๊ฐ€์ƒ ์ƒ์†

diamond

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์ค‘์ƒ์†์€ ์ง€์–‘ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค. ๋‹ค์ค‘์ƒ์†์‹œ ๊ณตํ†ต๋ถ€๋ชจ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด๋–ค ์ชฝ์˜ ๋ถ€๋ชจ๋ฅผ ํ˜ธ์ถœํ• ์ง€ ๋ชจ๋ฅด๋Š” ๋ชจํ˜ธ์„ฑ์ด ์ƒ๊ธด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ::(๋ฒ”์œ„์ง€์ • ์—ฐ์‚ฐ์ž)๋ฅผ ํ†ตํ•ด ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๋”๋ผ๋„ ์ค‘๋ณต๋˜๋Š” ๋‚ด์šฉ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ• ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์ƒ์†์„ ๋ฐ›์„๋•Œ virtualํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ๊ฐ€์ƒ์ƒ์† ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ€์ƒ์ƒ์† ํ•˜๊ฒŒ ๋˜๋ฉด ๊ณตํ†ต ๋ถ€๋ชจ(์œ„์—์„œ classA)๋ฅผ ํ•˜๋‚˜๋งŒ ์ธ์‹ํ•˜๊ฒŒ ํ•˜์—ฌ(์œ„ ์ด๋ฏธ์ง€ ์ ์„ ) ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๊ฒŒ ํ•œ๋‹ค.

๊ฐ€์žฅ ํ™•์‹คํ•œ๊ฑด ๊ทธ๋ƒฅ ๋‹ค์ค‘์ƒ์†์„ ์ตœ๋Œ€ํ•œ ํ”ผํ•˜๋Š”๊ฒƒ์ด๋‹ค.