hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
hugDog

Android DevLog

๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์ •๋ฆฌ

C++ ์ •๋ฆฌ - 47 (์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค, auto_ptr ํ…œํ”Œ๋ฆฟ, ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ณ ๋ ค์‚ฌํ•ญ, auto_ptr ๋ณด๋‹ค unique_ptr์ด ๋” ์ข‹์€ ์ด์œ , unique_ptr์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์„ ํƒ)

2020. 12. 14. 18:01
728x90

์Šค๋งˆํŠธ  ํฌ์ธํ„ฐ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค

smart pointer๋Š” ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๋Š” ํด๋ž˜์Šค ๊ฐ์ฒด์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ง€๋‹Œ๋‹ค. ๋™์  ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์ž…์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

 

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์˜ ์‚ฌ์šฉ

3๊ฐœ์˜ ์Šค๋งˆํŠธ ํ…œํ”Œ๋ฆฟ (auto_ptr, unique_ptr, shared_ptr)์€ ๊ฐ๊ฐ new๋ฅผ ํ†ตํ•ด ์–ป์–ด์ง€๋Š” ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…ํ•  ํฌ์ธํ„ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค.

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๊ฐ€ ์ˆ˜๋ช…์„ ๋‹คํ–ˆ์„ ๋•Œ, ํŒŒ๊ดด์ž๋Š” delete๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŒ์ผ new๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์œ„ ์„ธ ๊ฐœ์˜ ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜์— ๋Œ€์ž…ํ•˜๊ฒŒ ๋˜๋ฉด, ๋‚˜์ค‘์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ฐ์ฒด๊ฐ€ ์ˆ˜๋ช…์ด ๋‹คํ–ˆ์„ ๋•Œ, ์ž๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ฐ์ฒด๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•˜๋Š” memory ํ—ค๋” ํŒŒ์ผ์„ ์†Œ์Šค์ฝ”๋“œ์— ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ํ›„, ์ผ๋ฐ˜์ ์ธ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ํฌ์ธํ„ฐ์˜ ์ข…๋ฅ˜๋ฅผ ๊ตฌ์ฒดํ™”ํ•œ๋‹ค.

 

auto_ptr ํ…œํ”Œ๋ฆฟ

template<class X>class auto_ptr {

public:

explicit auto_ptr(X*p =0) throw();

...};

(throw()๋Š” ์ด ์ƒ์„ฑ์ž๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ)

๋”ฐ๋ผ์„œ Xํƒ€์ž…์˜ auto_ptr ๊ฐ์ฒด๋ฅผ ์š”์ฒญํ•˜๋ฉด, Xํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ค๋Š” auto_ptr ๊ฐ์ฒด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

auto_ptr<double> pd(new double);

auto_ptr<string> ps(new string);

 

์—ฌ๊ธฐ์„œ, new double์€ new๊ฐ€ ๋ฆฌํ„ดํ•œ ์ƒˆ๋กœ ๋Œ€์ž…๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ auto_ptr<double>์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.

3๊ฐœ์˜ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›์•„๋“ค์ด๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์ (explicit) ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋“ค์€ ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ

string vatcion("I wandered lonely as a cloud.");

shared_ptr<string> pvac(&vaction); //์‚ฌ์šฉ ๋ถˆ๊ฐ€

pvac๊ฐ€ ์ˆ˜๋ช…์„ ๋‹คํ–ˆ์„ ๋•Œ ํ”„๋กœ๊ทธ๋žจ์€ delete ํ•˜๋ ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ heap์— ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ž˜๋ชป๋จ.

 

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ณ ๋ ค์‚ฌํ•ญ

auto_ptr<string> ps(new string("abc"));

auto_ptr<string> vocation;

vocation=ps;

ps์™€ vacation์ด ์ผ๋ฐ˜ ํฌ์ธํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด, ๋‘ ํฌ์ธํ„ฐ๋Š” ๊ฐ™์€ string ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š”, ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ ๊ฐ์ฒด์— ๋‘ ๋ฒˆ ํ•ด์ œ๋ฅผ ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋œ๋‹ค. (ps๊ฐ€ ์ˆ˜๋ช…์„ ๋‹คํ–ˆ์„ ๋•Œ ํ•œ๋ฒˆ, vocation์ด ์ˆ˜๋ช…์ด ๋‹คํ–ˆ์„ ๋•Œ ํ•œ๋ฒˆ)

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋ณต์‚ฌ๋ณธ์ด ๋˜๋ฏ€๋กœ, ๋‘ ํฌ์ธํ„ฐ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ง€์‹œํ•˜๊ฒŒ ๋œ๋‹ค.
  • ํ•˜๋‚˜์˜ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋งŒ์ด ํŠน์ • ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์†Œ์œ ๊ถŒ ๊ฐœ๋…์„ ๋„์ž…ํ•œ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๊ฐ€ ๊ทธ ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ, ํŒŒ๊ดด์ž๊ฐ€ ๊ทธ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ, ๋Œ€์ž…์„ ํ†ตํ•ด ์†Œ์œ ๊ถŒ์„ ์ด์ „์‹œํ‚จ๋‹ค. ์ด๊ฒƒ์ด auto_ptr, unique_ptr์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ํŠน์ •ํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋“ค์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์ถ”์ ํ•˜๋Š” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๊ฒƒ์„ ์ฐธ์กฐ ์นด์šดํŒ…(reference counting)์ด๋ผ ํ•œ๋‹ค. ๋Œ€์ž…ํ•  ๋•Œ๋งˆ๋‹ค ์ฐธ์กฐ ์นด์šดํŒ…์ด 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. ์–ด๋–ค ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์˜ ์ˆ˜๋ช…์ด ๋‹คํ•  ๋•Œ ๋งˆ๋‹ค ์ฐธ์กฐ ์นด์šดํŒ…์ด 1์”ฉ ๊ฐ์†Œ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์˜ ์ˆ˜๋ช…์ด ๋‹คํ–ˆ์„ ๋•Œ delete๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ด๊ฒƒ์ด shared_ptr ์ „๋žต์ด๋‹ค.

auto_ptr ๋ณด๋‹ค unique_ptr์ด ๋” ์ข‹์€ ์ด์œ 

์•„๋ž˜์™€ ๊ฐ™์€ ์„ ์–ธ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

auto_ptr<string> p1(new string("auto")); //#1

auto_ptr<string> p2; //#2

p2=p1 //#3

 

#3์—์„œ p2๊ฐ€ ๋ฌธ์ž์—ด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์„ ์ธ์ˆ˜ํ–ˆ์„ ๋•Œ, p1์€ ์†Œ์œ ๊ถŒ์„ ์žƒ์–ด๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ p1์ด ๋” ์ด์ƒ ์œ ํšจํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์ด p1์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

unique_ptr์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

unique_prt<string> p3(new string("auto")); //#4

unique_ptr<string> p4; //#5

p4=p3; //#6

์ด ๊ฒฝ์šฐ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” #6 ์„ ์–ธ์— ๋Œ€ํ•ด ํ—ˆ๋ฝ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋กœ unique_ptr์€ auto_ptr๋ณด๋‹ค ๋” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ•˜๋‚˜์˜ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์—์„œ ๋‹ค๋ฅธ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ณผ์ •์—์„œ ํƒ€์ด๋ฐ์ด ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์ œ์•ˆํ•œ๋‹ค.

unique_ptr<string> demo(const char *s)

{

unique_str<string> temp(new string(s));

return temp;

}

๊ทธ๋ฆฌ๊ณ , ๋‹ค์Œ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

unique_ptr<string> ps;

ps=demo("Uniquely Special");

 

์—ฌ๊ธฐ์„œ, demo()๋Š” ์ž„์‹œ unique_ptr์„ ๋ฆฌํ„ดํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ps๋Š” unique_ptr์ด ๋ฆฌํ„ดํ•œ ๊ฐ์ฒด์˜ ์†Œ์œ ๊ถŒ์„ ์–ป๋Š”๋‹ค. ๊ทธ๋•Œ ๋ฆฌํ„ด๋œ unique_ptr์€ ์‚ญ์ œ๋œ๋‹ค.

 

c++์€ unique_ptr์„ ๋‹ค๋ฅธ unique_ptr๋กœ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๋Š” std::move()๋ผ๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

using namespace std;

unique_ptr<string> ps1,ps2;

ps1 = demo("Uniquely special");

ps2 = move(ps1);

ps1 = demo(" and more");

cout<<*ps2<<*ps1<<endl;

 

๋˜ํ•œ, unique_ptr์€ array๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋“œ์‹œ delete์™€ new, delete[]์™€ new[]๊ฐ€ ์Œ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. auto_ptr์€ delete๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ delete[]๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ new๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ new[]์€ ์‚ฌ์šฉ๋ถˆ๊ฐ€.

 

std::unique_ptr<double[]> pda(new double(5));

//delete[]๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

 

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์„ ํƒ

ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, shared_ptr์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•ด ๋‹ค์ค‘ ํฌ์ธํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, unique_ptr์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. new๋กœ ๋Œ€์ž…๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…์—๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ์„ ํƒ์ด๋‹ค.

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์ •๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • C++ ์ •๋ฆฌ - 49 (copy(), ostream_iterator, istream_iterator, ๊ธฐํƒ€ ์œ ์šฉํ•œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋“ค)
    • C++ ์ •๋ฆฌ - 48 (ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ปจํ…Œ์ด๋„ˆ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ดํ„ฐ๋ ˆ์ดํ„ฐ, ํ•จ์ˆ˜ ๊ฐ์ฒด, vector ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค, Range์— ๊ธฐ์ดˆํ•œ ๋ฃจํ”„(c++11))
    • C++ ์ •๋ฆฌ - 46 (string : c++11 ์ƒ์„ฑ์ž๋“ค, string ํด๋ž˜์Šค ์ž…๋ ฅ, ๋ฌธ์ž์—ด ์ž‘์—…, ์˜ค๋ฒ„ ๋กœ๋”ฉ๋œ find() ๋ฉ”์„œ๋“œ)
    • C++ ์ •๋ฆฌ - 45 (RTTI, dynamic_cast ์—ฐ์‚ฐ์ž, typeid ์—ฐ์‚ฐ์ž์™€ type_info ํด๋ž˜์Šค, ๋ฐ์ดํ„ฐํ˜• ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž, string ํด๋ž˜์Šค)
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”