Inherence
์ ์ฒด์ ์ธ ๊ตฌ์กฐ
์์์ด ํ์ํ ์ด์
์์์ ๋งค์ฐ ์ ์ฉํ๋ค. 13. Class & Object & Constructor ๊ธ์ ๋ค์ ๊ธฐ์ตํด๋ณด์.
์ฐ๋ฆฌ๊ฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋, ์ฝ๊ฒ ๋งํด, ์ด๋ค ๋ฌผ์ฒด๋ฅผ ์ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๋ ํ๋จ์ด ๋ค์ด์ ์ด๋ค.
ํจ์๋ง ๊ฐ์ง๊ณ ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๊ธฐ ๋ณด๋ค๋, ๋ด๊ฐ ๋ฌผ๊ฑด์ ์ ์ํ๊ณ ๊ทธ ๋ฌผ๊ฑด๋ค์ ์ค์ ๋ก ๋ง๋ ๋ค, ๋ฌผ๊ฑด๋ค๋ก ๋ค๋ฅธ ํ๋์ ํ๋ ๊ฒ์ด ๋ณด๋ค ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ ์ ์ฌ์ฉํ๋ ์ฌ์ง์ ๋ค์ ์ฌ์ฉํด๋ณด๋ฉด,
๊ฐ๋จํ๊ฒ ์ด๋ ๊ฒ ์ ์ํ ์ ์๋ค. ๋ฌผ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ดย ํด๋์ค, ๊ทธ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๋์์ดย ๊ฐ์ฒด, ์ค์ ๋ก ๋ง๋ค์ด์ ธ ๊ตฌ์ฒดํ ๋ ๋ฌผ์ฒด๋ฅผย ์ธ์คํด์ค๋ผ ๋ถ๋ฅธ๋ค.
๊ทธ๋ผ, ์์์ ๊ฐ๋ ์ ์ ํ์ํ ๊น? ์์ ํด๋์ค ์์์์ ๋ฆฌ๋ชจ์ปจ ์ค๊ณ๋๋ ๊ต์ฅํ ๋ค์ํ ์ ์๋ค.
TV ๋ฆฌ๋ชจ์ปจ, ์ฐจ ๋ฆฌ๋ชจ์ปจ, ์์ด์ปจ ๋ฆฌ๋ชจ์ปจ.. ์ด๋ ๊ฒ ๋ค์ํ ๋ฆฌ๋ชจ์ปจ์ด ์์ง๋ง, ์ด๋ ์์ ์ธ์์ ์กด์ฌํ๋ ํ๋์ ๋ฌผ๊ฑด(์ธ์คํด์ค)๋ก ๊ตฌํํ๊ธฐ ์ํด์๋, ๊ฐ์์ ๋ง๋ ์ค๊ณ๋(Class)๊ฐ ๋ฐ๋ก ํ์ํ๋ค.
ํ์ง๋ง ์ด๋ ์๋ค์ด ๊ฐ์ง๋ ๊ทผ๋ณธ์ ์ธ ํน์ฑ์ ๋ชจ๋ ๋์ผํ๋ค. ์ด ์ค๊ณ๋(Class)๋ฅผ ๋ง๋ค ๋ ์์ด์ ๋ณด๋ค ํฐ ์งํฉ ๊ฐ๋ ์ ๋์ ํ๋ฉด ์ด๋จ๊น? ๋ ํฐ ํด๋์ค์์ ๊ฐ์ง๋ ํน์ฑ์ ๋ณํํด์ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด ์ด๋จ๊น?
์ด๊ฒ์ด ๋ฐ๋กย ์์ย ์ด๋ค.
์ด๋ ๊ฒ ๋ถ๋ชจ ํด๋์ค๋ก ๋ถํฐ ํ์๋ ๋ค๋ฅธ ๋ ์๋ค์ ๋ง๋ค์ด ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค.
๋ฐ๋ผ์ ๋ถ๋ชจํด๋์ค๋ ์์ํด๋์ค์ ๋ด์ฉ์ ๋ฐ๋์ ๊ฐ์ง ์ ๋ฐ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ํด๋์ค๊ฐ (A) ์ด๊ณ , ๋ถ๋ชจํด๋์ค๋ก ๋ถํฐ ๋ง๋ค์ด์ง ํ์ ํด๋์ค๊ฐ (Aโ) ๋ผ ํ์ ๋, ๊ฐ๊ฐ์ ํด๋์ค๋ก ๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ (a, aโ)์ด๋ผ ํ๋ฉด, ํ ๋น์ด ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ํ๋๋ฟ์ด๋ค.
a = a'; // ๊ฐ๋ฅ
a' = a; // ๋ถ๊ฐ๋ฅ
์ด๋ ๊ฒ ๋ถ๋ชจ๋ ์์์ ๋ด์ฉ์ ์ผ๋ถ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ์๋ ๋ณ์๋, ํจ์์ ๊ดํด์๋ ๋ฌด์ํ๊ณ ์๋ ๊ฐ๋ง ํ ๋น ๋ฐ์ผ๋ฉด ๋์ง๋ง,
์์ ํด๋์ค์ ๋ถ๋ชจํด๋์ค์ ๊ฐ์ ํ ๋น ํ ์ ์๋ค.
์์ ํด๋์ค๊ฐ ๊ฐ์ง๋ ๋ณ์๋ ๋ถ๋ชจํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฐ์ ํ ๋น ๋ฐ์์ผํ๋์ง ๋ชจํธํด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
Base ์ Derived ๊ฐ ์์๊ด๊ณ
Summary
- Base : Privateย โ ์ฌ์ฉ ๋ถ๊ฐ
- Base : Protectedย โ Private
- Base : Publicย โ ์์ ํ์ ์ ๋ฐ๋ผ ๋ณํ!
Example 1
Output
Base
Base
Derived
Program ended with exit code: 0
Initialize List์ ์ค์์ฑ
์ง๊ธ๊น์ง ์์์ ํด๋์ค๋ฅผ ์์ํ๋๋ฐ ์์ด ๊ธฐ์กด ํด๋์ค์์ ์ ์๋ ์์ฑ๊ณผ, ํ์ ํด๋์ค์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์์์ ๋ฐ๋์ง์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ๋ฒ์๊ฐ ์ ํ๋จ์ ๋ฐฐ์ ๋ค.
๊ทธ๋ฐ๋ฐ, ๋ณดํต ์ฐ๋ฆฌ๋ ํด๋์ค๋ฅผ ์์ฑํ ๋, Private์ ์ด ํด๋์ค๊ฐ ๊ฐ์ง๋ ๋ณ์๋ค์ ์ ์ํ์ฌ ์ฌ์ฉํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ํ์ํด๋์ค๋ฅผ ์์ฑ ํ ๋, ์์ ์์ฑ์ Publicย ์ผ๋ก ์ค๋ค๊ณ ํ๋๋ผ๋, Private์ ์์ฑ๋ ๋ ์์ ์ฌ์ฉํ ์๊ฐ ์๋ค.
๋ฐ๋ผ์ ๋ด๊ฐ ๋ง๋ ํ์ ๋ณ์๊ฐ ๊ธฐ์กด์ ํด๋์ค๋ฅผ ๋ฐ์์ ๊ฐ์ ๋ณ์๋ค์ ๋ฃ์ด์ค์ผ ํจ์๋ ๊ทธ ๋ณ์์ ์ ๊ทผํ ์๊ฐ ์๋คย ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด ๋, Initialize List๊ฐ ์ค์ํ ์ด์ ๊ฐ ๋์จ๋ค. ์์ ๋ฅผ ํตํด ์์๋ณด์.
Example
function overloading
์ด๋ฆ๋ง ๊ฐ์ ํจ์๋ฅผ ์๋ฏธํ๋ค. ์ ๋ ฅ ํ๋ผ๋ฏธํฐ์ ์๋ฃํ, ์ ๋ ฅ ํ๋ผ๋ฏธํฐ์ ๊ฐฏ์, ์ถ๋ ฅํ๋ผ๋ฏธํฐ์ ์๋ฃํ ๋ฑ, ์๋ฌด ์๊ด์ด ์๋ค.
ํ์ง๋ง ํจ์ ์ด๋ฆ์ ๋์ผํ๊ฒ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ง๋ ๋ณธ์ง์ ์ผ๋ก ์ํํ๋ ๋ด์ฉ์ ๋์ผ ํ ๊ฒ์ด๋ค.
๋ฐ๋ผ์, ํจ์ ์ค๋ฒ๋ก๋ฉ์,ย ํ๋ ํ๋, ๋ณธ์ง(A)์ด ๋์ผํ ๋ ์ย ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ฒฐ๊ตญ ๊ฐ์ ์ด๋ฆ์ ๋ค๋ฅธ ํจ์๋ค์ดย ์์ด๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ function overloadingย ์ด๋ผ ํ๋ค.
int sum(int x, int y),
double sum(double x, double y)
float sum(float x, float y, float z)
function overriding
ํจ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์์์ ํน์ํ ๊ฒฝ์ฐ์ ํด๋น๋๋๋ฐ, base ํด๋์ค์ ํจ์๋ก ๋ถํฐ ์์๋ฐ์ ๊ตฌ์ฒด์ ์ด๊ฑฐ๋, ํน์ ์ด ํด๋์ค์ ๋ง๋ ๋ฐฉ์์ผ๋ก ํจ์๋ฅผ ์ฌ์ ์ ํ ๋ ์ฌ์ฉํ๋ค.
์ฆ,ย ๊ฐ์ ์ด๋ฆ, ๋ ๊ฐ์ ์ ๋ ฅํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ผ๋, ํจ์๋ด์ ์๋์ ์์ด์ ํจ์ ์ค๋ฒ๋ก๋ฉ ์ฒ๋ผ (A)์ ๋ณธ์ง์ ๋ฐ๋ฅด๊ธฐ ๋ณด๋ค๋,
Aโ ํน์ Bย ์ ๊ฐ์ด ๋ณ๊ฒฝ์ด ์์ ์ ์๋ค. ์์์ ๋ฐ์ ์ด๋ ์์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ณ ์์ผ๋ฏ๋ก, ์๋ ํด๋์ค์ ํจ์์ ๋ด๊ฐ ์ํ๋ ๋ด์ฉ์ย ์ถ๊ฐ ํน์ ์ฌ๋ผํย ๊ณ ์๋ค.
๋ฐ๋ผ์ย function overridingย ์ด๋ค.
Virtual, override
์ฐ๋ฆฌ๋ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ํ ๋, ๋ถ๋ชจ ํด๋์ค๋ก ๋ถํฐ ์์ ํด๋์ค๋ก ๊ฐ๋, ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ๊ฒ์ ๋ช ์ํด์ฃผ๊ธฐ ์ํดย Virtualย ์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ช ์ํด์ฃผ์๋ค.
๋ ์์ํด๋์ค์์๋ ๋ถ๋ชจํด๋์ค๋ก ๋ถํฐ ๋ฐ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํด overrideย ๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ฌ์ค ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์๋ค. ํ์ง๋ง,
- ์ ์ง๋ณด์
- Polymorphism (๋คํ์ฑ)
์ ์ํด ํ์์ ์ด๋ ๋ช ์์ ์ผ๋ก ์์ฑํด์ฃผ๋ ๊ฒ์ ์ต๊ด๋ค์ด์.
์์ค์ฝ๋ ์ด ์ ๋ฆฌ
Output
PlainA
<<Fancy***A>>
FIXED
Program ended with exit code: 0