๋ชฉ์ฐจ
์ค๋ฒ๋ผ์ด๋ฉ vs ์ค๋ฒ๋ก๋ฉ
(๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์) ํ๋ณํ
๋คํ์ฑ์ด๋?
๋คํ์ฑ์ด๋, ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค์ํ ์์ฑ์ด๋ ํํ๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ(OOP, Object-Oriented Programming)์ ๋ํ์ ์ธ ํน์ง ์ค ํ๋์ด๋ค.
์ค๋ฒ๋ผ์ด๋ฉ(Overriding), ์ค๋ฒ๋ก๋ฉ(Overloading), ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ํ๋ณํ(Casting)์ด ๋ํ์ ์์ด๋ค.
์ค๋ฒ๋ผ์ด๋ฉ vs ์ค๋ฒ๋ก๋ฉ (Overriding vs Overloading)
์ด๋ฆ | ์ค๋ช | ์์ |
์ค๋ฒ๋ผ์ด๋ฉ(Overriding) | ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ํจ์๋ฅผ ์ฌ์์ฑํ๋ ๊ฒ | |
์ค๋ฒ๋ก๋ฉ(Overloading) | ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ง ๋ฌ๋ฆฌํ์ฌ ์์ฑํ ๊ฒ | ํด๋์ค์ ๋งค๊ฐ๋ณ์๋ง ๋ค๋ฅธ ๋ค์ํ ์์ฑ์ |
์ผ์ชฝ ์ฝ๋๊ฐ ์ค๋ฒ๋ก๋ฉ, ์ค๋ฅธ์ชฝ ์ฝ๋๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ์ด๋ค.
๋์ ๊ณตํต์ ์ ํจ์๋ช ์ด ๊ฐ๋ค๋ ์ ์ด๋ค.
ํ์ง๋ง ์ค๋ฒ๋ผ์ด๋ฉ์ ์ํ ๊ด๊ณ์ ํด๋์ค ๋ด์์ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ํจ์๋ฅผ ๋ฎ์ด ์์ฑํ๋ค๋ ์ ์์ ๋ค๋ฅด๋ค.
์ค๋ฒ๋ก๋ฉ์ ๋ณด๋ฉด Car์ ์์ฑ์๊ฐ 2๊ฐ๋ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด ๋ ๋ ์์ฑ์์ ์ฐจ์ด์ ์ ๋งค๊ฐ๋ณ์์ด๋ค.
์์ฑ์ ๋ฟ๋ง ์๋๋ผ ์ด๋ค ํจ์๋ผ๋ ์ด๋ฆ์ด ๊ฐ์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ๋ค๋ฅด๋ฉด ์ค๋ฒ๋ก๋ฉ์ ์ฌ์ฉํ ์ ์๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ๋ณด๋ฉด ์์ ํด๋์ค์ธ Car์์ ์์ฑํ horn ํจ์๋ฅผ ํ์ ํด๋์ค์์ ๋์ผํ ํจ์๋ช ๊ณผ ๋์ผํ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ
์ฌ์ ์ ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. Truck ๊ฐ์ฒด์์ horn์ ํธ์ถ ์ ์ฌ์ ์ํ ๋ก์ง์ผ๋ก ์คํ๋๋ค.
(๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์) ํ๋ณํ
ํ๋์ ํ์ ์ ๋ค๋ฅธ ํ์ ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ํ์ ๋ณํ ํน์ ํ๋ณํ์ด๋ผ๊ณ ํ๋ค.
ํ๋ณํ์ '์๋ ํ๋ณํ(Promotion)'๊ณผ '๊ฐ์ ํ๋ณํ(Casting)'์ผ๋ก ๋๋ ์ง๋ค.
ํด๋น ๊ธ์์๋ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ๊ฐ์ ํ๋ณํ์ ์ค์ฌ์ผ๋ก ์ด์ผ๊ธฐ ํจ์ผ๋ก
๊ธฐ๋ณธ ํ์ ์ ํ๋ณํ์ ๋ ๊ณต๋ถํ๊ณ ์ ํ๋ค๋ฉด ํด๋น ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
ํด๋์ค ํ์ ์ ๋ณํ, ์ฆ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ํ๋ณํ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ค์ด์บ์คํ ๊ณผ ์ ์บ์คํ ์ผ๋ก ๋ถ๋ฅ๋๋ค.
๋ค์ด/์ ์บ์คํ ํ์ต ์ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์ ์ ์ธ์ ๋ํด ์์๋ณด๋๋ก ํ์
์๋ ์ฝ๋์์ ์์ฑ ๊ฐ์ฒด์ ๋์ผํ ํ์ ์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋น์ฐํ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋์ ์์๊ด๊ณ์ด๋ฏ๋ก IS-A ๊ด๊ณ์๊ณผ ๋์์ ํ๋ณํ์ด ๊ฐ๋ฅํ ๊ด๊ณ์ด๋ค.
IS-A๊ด๊ณ๋ "A๋ B์ด๋ค."๋ฅผ ์ ์ฉํ ์ ์๋ ๊ด๊ณ๋ก, "Truck์ Car์ด๋ค"๋ผ๊ณ ํ ์ ์์ง๋ง "Car๋ Truck์ด๋ค"๋ ์ฑ๋ฆฝํ ์ ์๋ค.
๋ค์ด์บ์คํ vs ์ ์บ์คํ (Downcasting vs Upcasting)
๋ช ์นญ | ์ค๋ช |
๋ค์ด์บ์คํ (Downcasting) | ์์(๋ถ๋ชจ) ํด๋์ค ํ์ ์ ์ฐธ์กฐ ๋ณ์๊ฐ ํ์(์์) ํด๋์ค ๋ณ์๋ก ํ์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ |
์ ์บ์คํ (Upcasting) | ํ์(์์) ํด๋์ค ํ์ ์ ์ฐธ์กฐ ๋ณ์๊ฐ ์์(๋ถ๋ชจ) ํด๋์ค ๋ณ์๋ก ํ์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ |
์๋ ์ ์บ์คํ ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋๋ก ํ์
๋จผ์ Truck ํด๋์ค ํ์ ์ผ๋ก Truck ๊ฐ์ฒด car1๋ Car์ wheel๊ณผ Truck์ truck_bed ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง Car ํด๋์ค ํ์ ์ผ๋ก Truck ํด๋์ค ํ์ ์ car1 ๊ฐ์ฒด๋ฅผ ์ ์บ์คํ ํ๋ฉด Truck ํด๋์ค์๋ง ์๋ truck_bed๋ ์ฌ์ฉํ ์ ์๋ค.
์ด์ ๋ค์ด์บ์คํ ์์ ์ฝ๋๋ฅผ ๋ณด๋๋ก ํ์
Car ํด๋์ค ํ์ ๋ณ์ car1์ด Truck ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
car1์ ํ์ ์ Car์ด๋ฏ๋ก Truck์ truck_bed ๋ณ์์๋ ์ ๊ทผ ํ ์ ์๋ค.
ํ์ง๋ง Truck ํ์ ์ผ๋ก ํ๋ณํ์ ํ ๋ณ์ car2๋ tuck_bed์๋ wheel์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋ค.
REFERENCE
https://kadosholy.tistory.com/99
'๐Language > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ ๋ ฅ ๋ฐ๊ธฐ | Scanner | BufferedReader | StringTokenizer (0) | 2023.04.27 |
---|