โ๏ธ ์์ฑ์
: ์ปจํธ๋ํธ๊ฐ ์์ฑ๋ ๋ ๋ฑ ํ ๋ฒ๋ง ์คํ๋๋ ํจ์
๋ณ์์ ๊ฐ์ ์ด๊ธฐํํ ๋ ์ฃผ๋ก ์
์ค๋งํธ ์ปจํธ๋ํธ๋ฅผ ์ธ์คํด์ค ํ ํ ๋, ์์ฑ์์์ ๊ฐ์ ๋ฐ์์ ์ด๊ธฐ์ ์์ฑ๋จ (์ด๊ธฐ ๊ฐ์ ๋ฃ์ด์ค๋ค๋ ๋๋)
-> ์ด๊ธฐ ์ธํ ์ด ํ์ ์๋ค๋ฉด ์์ฑ์๋ฅผ ์๋ตํ ์ ์์.
์ด๋ ๊ฒ A๋ผ๋ ์ปจํธ๋ํธ๋ฅผ ์์ฑํ๊ณ name๊ณผ age๊ฐ์ ์ด๊ธฐํ ํ๋ ์์ฑ์๋ฅผ ๋ง๋ค์๋ค.
๋ฐ์ change๋ผ๋ ํจ์๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ์ ์์ฑํ name๊ณผ age๊ฐ์ ๋ฐ๊ฟ๋ ์ฌ์ฉํ๋ค.
์ด์ B๋ผ๋ ์ปจํธ๋ํธ์์ A๋ฅผ ์ธ์คํด์ค๋ก ์์ฑํ ๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๊ณผ ๋์์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ get()ํจ์๋ฅผ ํตํด ๊ฐ์ ํ์ธํ๊ณ , changeํจ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก A์ change()ํจ์๋ฅผ ์ด์ฉํ์ฌ
์ํ๋ ๊ฐ์ผ๋ก ๋ณ์๊ฐ์ ๋ฐ๊ฟ์ฃผ๋๋ก ํ๋ค.
๊ทธ๋ฌ๋ ์ด๋ฐ์์ผ๋ก ์ธ์คํด์คํ ํด์ ํจ์์ ์ ๊ทผํ๋ฉด ๊ฐ์ค ์๋น๊ฐ ๋ง์์ ธ์ ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
(B์์ A์ ์์๋ค์ ๋ง์ด ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ)
๋ณด์์ ์ธ ์ธก๋ฉด์์ ํ ๋ธ๋ก๋น ์๋นํ ์ ์๋ ๊ฐ์ค ์์ ์ ํด๋๊ณ ์๋ค.
๋ฐ๋ผ์ ์๋นํ๋ ๊ฐ์ค ์์ด ๋ง์์ง๋ฉด ์์ ๋ฐฐํฌ๋ฅผ ๋ชปํ ์๋ ์๊ฒ ๋๋ค.
ํด๋ก ํฉํ ๋ฆฌ ํจํด(Clone Factory Pattern)์ผ๋ก ๊ฐ์ค ์๋น๋์ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์๋ค.
(๋์ค์ ์ค๋ช )
โ๏ธ ์์
์ด๋ ๊ฒ Father๋ผ๋ ์ด๋ฆ์ผ๋ก ์ปจํธ๋ํธ๋ฅผ ํ๋ ์์ฑํ๊ณ
์๋์ Son์ด๋ผ๋ ์ด๋ฆ์ ์ปจํธ๋ํธ์์ ์์์ ๋ฐ๊ฒ ํ๋ค.
์์ํ ๋๋ is ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ ๋ ๊ฒ ์์๋ง ํ๊ณ ์ปจํธ๋ํธ ๋ด์ ์๋ฌด๊ฒ๋ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ๋ฐฐํฌ๋ฅผ ํด๋ณด๋ฉด,
๊ทธ๋๋ ์ด๋ ๊ฒ
๋ถ๋ชจ ์ปจํธ๋ํธ์์ ์ด๋ฏธ ์ ์๋
๋ณ์๋ค๊ณผ ํจ์๋ค์ ์ ๊ทผํ์ฌ
์ฌ์ฉํ ์ ์์์ ์ ์ ์๋ค.
๋ถ๋ชจ ์ปจํธ๋ํธ์ ์์ฑ์๋ฅผ ๋ง๋ค๋ฉด ์ด๋ป๊ฒ ์ฌ์ฉ ํ ์ ์์๊น?
๋ถ๋ชจ ์ปจํธ๋ํธ์ ์ด๋ ๊ฒ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ์์ฑ์๋ฅผ ํ๋ ๋ง๋ค์๋ค.
๊ทธ๋ผ ์ด๋ ์์ ์ปจํธ๋ํธ์์ ์์์ ํ ๋
์ด๋ฐ์์ผ๋ก ์์ ๋ฐ์ ๋ ๋ฐ๋ก ๋ณ๊ฒฝ ํ ์ด๋ฆ์ ์ ์ด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ผ ๊ฒฐ๊ณผ ์ฐฝ์์๋ ์ ๋ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
โ๏ธ ์ค๋ฒ๋ผ์ด๋ Override
์๊น ๋ง๋ getMoneyํจ์๋ฅผ Son ์ปจํธ๋ํธ์์ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๊ณ ์ ํ๋ค.
์ด๋, ๋ถ๋ชจ ์ปจํธ๋ํธ์์ ํด๋น ํจ์์ virtual ์ด๋ผ๋ ํค์๋๋ฅผ ์ ์ด์ค์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์ปจํธ๋ํธ์์ ํด๋น ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ค.
์ด๋๋ override ๋ผ๋ ํค์๋๋ฅผ ์ ์ด์ผํ๋ค.
์ฌ๊ธฐ์ ์๋ค์ด ์ผ์ ํ๋ฉด ๋์ ๋ ๋ฒ ์ ์๋๋ก work() ํจ์๋ฅผ ๋ง๋ค์๊ณ ,
getMoney ํจ์๋ ์ผ์ ํ ๋งํผ์ ๋ํ ์๋ค์ ์ฌ์ฐ์ ๋ฆฌํดํ๋ค.
work ํจ์๋ฅผ ํ๋ฒ๋ ํธ์ถํ์ง ์์์ ๋๋
์์ง๊น์ง ์ฌ์ฐ์ด 100์ผ๋ก ๋์จ๋ค.
์ฌ๊ธฐ์ work ํจ์๋ฅผ ๋๋ฒ ๋๋ฌ๋ณด์๋ค.
๊ทธ๋ฌ๋๋ ์ด๋ ๊ฒ 300์ด ์ ์ฐํ ๋์จ๋ค.
+) ๋ถ๋ชจ ์ปจํธ๋ํธ์ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ
์์ ์ปจํธ๋ํธ์์ ์ด๋ ๊ฒ ์์ฑ์๋ฅผ ๋ง๋ค ์ ์๋ค.
โ๏ธ ๋ ๊ฐ ์ด์ ์์
์ด๋ ๊ฒ Father, Mother ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋๊ฐ์ ๋ถ๋ชจ์ปจํธ๋ํธ๋ฅผ ๋ง๋ค์๋ค.
์ฌ๊ธฐ์ ์์ ์ปจํธ๋ํธ๊ฐ ๋ ๋ถ๋ชจ ์ปจํธ๋ํธ๋ฅผ ์์์ ๋ฐ์ ๋ ๋ง์ฐฌ๊ฐ์ง๋ก is ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ! ๊ทธ๋ฐ๋ฐ ์ผ์ชฝ์ ๋ณด๋ฉด ์ค๋ฅ๊ฐ ๋ ๊ฒ์ ์ ์ ์๋ค.
์ค๋ฅ์ ๋ด์ฉ์ ์ด๋ฌํ๋ฐ,
์๋ฌ๊ฐ ๋๋ ์ด์ ๋ Father ์ปจํธ๋ํธ์ Mother ์ปจํธ๋ํธ ๋ชจ๋
getMoney๋ผ๋ ๋๊ฐ์ ์ด๋ฆ์ ํจ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ์ค๋ฅ๋ฅผ ์์ ๊ธฐ ์ํด์๋
์ด๋ ๊ฒ getMoney ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ๋ฉด ๋๋ค.
์์์ ํ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์งํํ๋ฉด ๋๋ค.
๋ถ๋ชจ ์ปจํธ๋ํธ์์ ํด๋น ํจ์์ virtual ํค์๋๋ฅผ ๋ฃ๊ณ ,
์์ ์ปจํธ๋ํธ์์ override ํค์๋๋ฅผ ์ ์ด์ ํจ์๋ฅผ ๋๊ฐ์ด ์์ฑํ๋ฉด๋๋ค.
์ด๋ ๋๊ฐ์ ๋ถ๋ชจ ์ปจํธ๋ํธ๋ฅผ ์ฌ์ฉํ์ผ๋ฏ๋ก ๋ณด๋ ๊ฒ๊ณผ ๊ฐ์ด override ํค์๋ ๋ค์ ์ปจํธ๋ํธ ๋ช ์ ์ ์ด์ค์ผํ๋ค.
๋๊ธ