[Java] 09. ํด๋์ค ์์
- -
๐ ํด๋์ค ์์
ํ์ค์ ์์์ ๋ถ๋ชจ์ ์ฌ์ฐ์ ์์์ด ์์๋ฐ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด์์์ ์์์ ๋ถ๋ชจ์ ์๋ฌผํ์ ํน์ง์ ๋ฌผ๋ ค๋ฐ๋ ์ ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ต๋๋ค. ๋ถ๋ชจ ํด๋์ค์์ ๋ง๋ค์ด์ง ํน์ง์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๊ณ , ํ์์ ๋ฐ๋ผ ์ ์ง, ์์ , ์ถ๊ฐํ ์ ์์ต๋๋ค.
์๋ฐ์ ๊ฐ์ฒด๋ณ๋ก ๊ฐ ํด๋์ค๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ๋ฐ๋ณต๋๋ ๋ถ๋ถ์ด ์์ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ถ๋ถ์ ํจ์จ์ ์ผ๋ก ๋์ผํ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ ํด๋์ค ์์์ ๊ฐ๋ ์ ๋ฐฐ์๋ด ์๋ค. ๋ํ ํ์ ํด๋์ค์์ ์์๋ ์์ ํด๋์ค๋ฅผ ์ ๊ทผ ๋ฐ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ด ์๋ค.
๐ I. ํด๋์ค ์์์ ๊ธฐ๋ณธ ๊ฐ๋
๐ 1. ๋ฐฐ๊ฒฝ
๋น์ทํ ๋์์ ํ๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง์ ๋๋ค.
(1) ํฌ๊ด์ ์ธ ์์ฑ/ํ์๋ฅผ ๊ฐ๋ ํด๋์ค๋ก ๊ตฌํ
- ์ง๋์น ์ผ๋ฐํ๋ก ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ ๊ตฌ๋ถ๋ ๋ชจํธํ๊ณ ์กฐ์์ด ๋ณต์กํจ
- ๋ชจ๋ ๊ฐ์ฒด๊ฐ ํ๋์ ํด๋์ค๋ก ํํ๋ ๊ฒฝ์ฐ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก์ ์ป์ ์ ์๋ ์ด์ต์ด ์์ด ๋นํจ์จ์ ์
(2) ๋ ๋ฆฝ์ ์ธ ํด๋์ค๋ก ๊ตฌํ
- ๋น์ทํ ๋ด์ฉ์ ๋ฐ๋ณต์ ์ธ ํด๋์ค ์์ฑ์ ํจ์จ์
- ๋น์ทํ ํ์์ ๋ํด ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค/ํ์๋ฅผ ํ ์ ์์
- ํ๋์ ๋ฐฐ์ด๋ก ๋ฌถ์ ์ ์์
์ด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฅ์ ์ ๋ฌถ์ด ๋ง๋ ๊ฒ์ด ์์์ด๋ผ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ ๋ฆฝ์ ์ธ ํด๋์ค๋ฅผ ์์ฑํ ๊ฒ์ฒ๋ผ ๊ฐ๋ณ์ ์ธ ํด๋์ค๊ฐ ์ ์๋์ด ๊ตฌ๋ถ๋์ง๋ง, ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ฑ์ด ์ต์ํ๋๊ณ ๋น์ทํ ํ์์๋ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ๋ก ์ ์ฉ์ํต๋๋ค.
๐ 2. ํด๋์ค ์์์ ๊ธฐ๋ณธ ๊ฐ๋
- ํน์ ํด๋์ค๊ฐ ๊ฐ์ง๋ ์ผ๋ถ ์์ฑ/ํ์๋ฅผ ๋ค๋ฅธ ์ ํด๋์ค์๊ฒ ์ ๊ณตํ๊ธฐ ์ํด ๋งบ๋ ๊ด๊ณ
- ๊ฐ์ฒด์งํฅ์ 5๊ฐ์ง ํน์ง ์ค ํ๋๋ก ํด๋์ค ์ ์์ ์ฌ์ฉ๋จ
- ์๋ก์ด ํด๋์ค๋ฅผ ์ํ์ฌ ์ด๋ฏธ ์กด์ฌํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํจ
- ๊ธฐ์กด์ ํด๋์ค ๋ฉค๋ฒ๋ฅผ ๊ทธ๋๋ก ์ด์ฉํ๋, ์๋ก์ด ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์์
๐ 3. ์์์ ์ด์
(1) ์ฝ๋์ ์ฌ์ฌ์ฉ
- ๋น์ทํ ๋์์ ํ๋ ์ฝ๋ ๋ฐ ํด๋์ค๋ฅผ ์ฌ์์ฑํ์ง ์๊ณ ๊ธฐ์กด์ ํด๋์ค ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ฌ์์ฑํ ์ ์์
- ๊ฒ์ฆ๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ผ๋ก ์ค๋ฅ๋ฅผ ์ต์ํํ ์ ์์
- ์์ค ์ฝ๋ ๊ด๋ฆฌ์ ์ ์ง ๋ณด์๊ฐ ์ฉ์ดํจ
- ๊ฐ๋ฐ ์๊ฐ์ด ๋จ์ถ๋จ
(2) ์ฐ๊ด๋ ์ผ๋ จ์ ํฌ๋์ค์ ๋ํ ๊ณตํต ๊ท์ฝ์ ์ ์
- ๊ณตํต ๋ถ๋ชจ๋ก๋ถํฐ ํ์๋ ๋น์ทํ ์ ํ์ ํด๋์ค ๊ฐ์ฒด๊ฐ์ ๋์์ ํต์ผํจ
- ๊ฐ๊ฒฐ์ฑ์ด ์ ๊ณต๋จ
- ๋์์ ํต์ผํ๋ ์์์ ์ฃผ์ ์ด์
๐ 4. ์์์ ์กฐ๊ฑด: IS-A ๊ด๊ณ
์์์ IS-A(~์ค์ ํ๋) ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ ๋ ์์์ ๊ธฐ๋ฐ์ผ๋ก ํํํ๊ธฐ ์ ์ ํฉ๋๋ค.
โ ์ฃผ์
(1) IS-A ๊ด๊ณ
- ~์ค์ ํ๋
(2) HAS-A ๊ด๊ณ
- ~์ ๊ฐ๋
- ์ฃผ ํด๋์ค ๋ฉค๋ฒ ํ๋์ ๋ค๋ฅธ ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋ ๋ฟ ์์์ผ๋ก ํํํ์ง ์์
- ๋ ํด๋์ค ๊ฐ์ ์ฐ๊ด์ฑ์ด ๋ฎ์์ ธ ๋ณ๊ฒฝ ๋ฐ ํ์ฅ์ด ์ฉ์ดํจ
EX) "ํ์ ๋ช ๋ถ" ํด๋์ค์ ๋ฉค๋ฒ ํ๋์ "ํ์" ๊ฐ์ฒด๋ฅผ ๋
๐ II. ์๋ฐ์์์ ํด๋์ค ์์
๐ 1. JAVA์์ ์์์ ํน์ง
- JAVA์ ๋ชจ๋ ํด๋์ค๋ ์์ ๊ด๊ณ๋ฅผ ๋ช ์ํ์ง ์์๋ Object ํด๋์ค๋ก๋ถํฐ ํ์๋จ
- JAVA์์๋ ๋จ์ผ ์์๋ง ์ ๊ณตํจ
* ๋ค์ค ์์์ด ํ์ฉ๋๋ interface ์ ๊ณต์ผ๋ก ๋ณด์ํจ
* ์ฆ ๋ถ๋ชจ ํด๋์ค๋ ํ ๋ฒ๋ง ์์๋ฐ์ ์ ์์ - private ๋ฉค๋ฒ๋ ์์์ ๋๋ ์ง์ ์ ์ธ ์ฐธ์กฐ๋ ๋ถ๊ฐ๋ฅํจ
* ์์ ํด๋์ค์์ ์ ๊ณตํ๋ Access ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทผ/์ด์ฉ ๊ฐ๋ฅํจ - ๋ณดํต ํ์ ํด๋์ค ์์ฑ์ ์ฒซ ์ค์์ ์์ ํด๋์ค ์์ฑ์๋ฅผ ๋ช
์์ ์ผ๋ก ํธ์ถ
* ์์ ํด๋์ค์ ๋ฉค๋ฒ๋ ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ํตํด ์ด๊ธฐํ
๐ 2. Super ํด๋์ค VS Sub ํด๋์ค
(1) Super ํด๋์ค
- = parent ํด๋์ค = base ํด๋์ค
- ์์ ์ ๋ฉค๋ฒ๋ค์ ์์ํด์ฃผ๋ ํด๋ผ์ค
(2) Sub ํด๋์ค
- = child ํด๋์ค = derived ํด๋์ค
- super ํด๋์ค๋ก๋ถํฐ ๋ฉค๋ฒ๋ค์ ์์ ๋ฐ๋ ํด๋์ค
๐ 3. ํด๋์ค ์์์ ์
- Person์ ์์๋ฐ์ ๋ํ์์ด๋ ๊ณ ๋ฑํ์๊ณผ ๊ฐ์ ํ์ ํด๋์ค๋ฅผ ์์ฑํ ์ ์์
- ์์๋ฐ์ ๋ถ๋ถ์ ์ถ๊ฐ์ ์ผ๋ก ๊ธฐ์ ํ ํ์ ์์
- ํ์ ํด๋์ค๋ ๊ทธ ํด๋์ค๋ง์ ํน์ง๋ค์ ์ถ๊ฐํ์ฌ ์์ฑํ ์ ์์
- UnivStudent ๊ฐ์ ๊ฒฝ์ฐ ๋ํ์๋ง์ ํน์ง์ธ ์ ๊ณต์ ๋ฉค๋ฒ๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ณต์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์๋ ์ถ๊ฐ
๐ 4. Sub ํด๋์ค์ ์ ์
class <subClassName> extends <superClassName> {
// subClass์ ์ถ๊ฐ๋ ๋ฉค๋ฒ ์ ์ธ
}
- extends : super ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ sub ํด๋์ค๋ก ์์ํ๋ผ
- superClassName : ์ ํด๋์ค์๊ฒ ์์ํด์ค, ์ด๋ฏธ ์กด์ฌํ๋ ํด๋์ค ์ด๋ฆ
- subClassName : ์์์ ํตํด ์๋ก ์์ฑ๋ ํด๋์ค์ ์ด๋ฆ
๐ 5. Sub ํด๋์ค ๊ฐ์ฒด
- Sub ํด๋์ค์ ๊ฐ์ฒด๋ super ํด๋์ค์์ ์์๋ฐ์ ๋ฉค๋ฒ๋ค๊ณผ sub ํด๋์ค์ ์ถ๊ฐ๋ ๋ฉค๋ฒ๋ค์ ๋ชจ๋ ์์ ์ ๋ฉค๋ฒ์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋จ, super ํด๋์ค์ private ๋ฉค๋ฒ๋ ์ง์ ์ ๊ทผ ๋ถ๊ฐ
- super ํด๋์ค์์ ์ ๊ณตํ๋ access ๋ฉ์๋ ์ด์ฉํ์ฌ ๊ฐ์ ์ ๊ทผ๋ง ๊ฐ๋ฅ
- ์์๋ฐ์ ์ผ๋ถ ๋ฉค๋ฒ๋ sub ํด๋์ค ๊ฐ์ฒด์ ๊ตฌ์ฒดํ๋ ์์ฑ/ํ์์ ๋ฐ๋ผ ์ฌ์ ์ ํ์
- ์ฌ์ ์๋ super ํด๋์ค ๋ฉค๋ฒ๋ ์ํ๋จ
๐ 6. protected ์ ๊ทผ ์ง์ ์
- default ๋ณด๋ค ์ข ๋ ์ ์ฐํ ์ ๊ทผ ์ ๊ณต
- ๊ฐ์ ํจํค์ง์ ๋ค๋ฅธ ํด๋์ค์์ public์ฒ๋ผ ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
- ๋ค๋ฅธ ํจํค์ง์ ๋ค๋ฅธ ํด๋์ค์์ ์์ ๊ด๊ณ๋ฅผ ๊ฐ์ ธ์ผ๋ง public์ฒ๋ผ ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
์ฆ, ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค์ ํ์ ํด๋์ค์์ ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง ๋ค๋ฅธ ํจํค์ง์ ์ผ๋ฐ ํด๋์ค์์๋ง ์ ๊ทผ ๋ถ๊ฐํ ์ ๊ทผ ์ง์ ์ ์ ๋๋ค.
๐ III. ๋ฉ์๋ ์ฌ์ ์
๐ 1. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(Over-riding)
- Sub ํด๋์ค์์ super ํด๋์ค์์์ ๊ฐ์ ์ด๋ฆ์ ๋ฉค๋ฒ๋ฅผ ๋ค์ ์ ์
- ๊ธฐ์กด์ ๋ฉค๋ฒ๋ฅผ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์์ ํ๋ ํจ๊ณผ
- ๋ฐ๋์ Super ํด๋์ค์์์ ๋์ผํ ํํ๋ก ์ ์ํด์ผํจ
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ Super ํด๋์ค์์ ์์๋ ๋ฉค๋ฒ๋ ์ํ๋จ
- Sub ํด๋์ค ๊ฐ์ฒด์ ๋ฉ์๋์์ ์ํ๋ ๋ฉค๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํด super ์ฐธ์กฐ๋ณ์ ์ด์ฉ
๐ 2. ์ค๋ฒ๋ผ์ด๋ฉ vs ์ค๋ฒ๋ก๋ฉ
์ค๋ฒ๋ก๋ฉ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ด๋ฆ์ ๋น์ทํ์ง๋ง ์ ํ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํจ
๐ 3. this์ super
(1) this
- ํน์ ๊ฐ์ฒด ๋ด์์ ๊ฐ์ฒด ์์ ์ ์๋ฏธํ๋ ์ฐธ์กฐ ๋ณ์
- ์์๋ฐ์ ์์ ํด๋์ค ๋ฉค๋ฒ๋ ์ ๊ทผ ๊ฐ๋ฅ
- ๋งค๊ฐ๋ณ์๊ฐ ๋ฉค๋ฒํ๋ ์ด๋ฆ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ์ฉ
(2) super
- ํ์ฌ ๊ฐ์ฒด์ ํ ๋จ๊ณ ๋ฐ๋ก ์์ ์์ ํด๋์ค๋ฅผ ์๋ฏธํ๋ ์ฐธ์กฐ ๋ณ์
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ผ๋ก ์ํ๋ ์์ ํด๋์ค์ ๋ฉ์๋ ํธ์ถ ์ ์ฌ์ฉ
- ์ํ๋ super ํด๋์ค ๋ฉค๋ฒ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฐธ์กฐ ์์ ์ฌ์ฉ
๐ 4. java.lang.Object
- ํน๋ณํ ์์๊ด๊ณ๋ฅผ ๋ช ์ํ์ง ์์์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Object๋ก๋ถํฐ ์์๋จ
- boolean equals(Object obj), String toString() ๋ฑ์ ์ฌ์ ์ํ๋ฉด ์ข์
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] 08. ๋ฐฐ์ด (0) | 2022.10.11 |
---|---|
[Java] 07-2 ์๋ฐ ๊ธฐ๋ณธ API (0) | 2022.10.06 |
[Java] 07-1 ์๋ฐ์ ํจํค์ง์ ๋ชจ๋ (0) | 2022.10.05 |
[Java] 06. ์บก์ํ์ ์ ๋ณด ์๋ (1) | 2022.09.30 |
[Java] 05. ํด๋์ค์ ๋ฉค๋ฒ (0) | 2022.09.29 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค