[Java ์ดํดํ๊ธฐ] 21. Java์ ์์
๐ฉท Java์ ์์์ด๋?
์์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋ ๊ธฐ๋ฅ์ ๋งํฉ๋๋ค.
์์์ ํตํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐
์์ ๋ ๋ง๋ฆฌ์ ํ ๋ผ๊ฐ ๋ณด์ด์๋์? ์๋งํ ๋ผ์ ์๊ธฐํ ๋ผ๊ฐ ์์ต๋๋ค.
์ด ๋ ํ ๋ผ๋ฅผ ์ถ์ํํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค๊ณ ํ์ ๋, ๋ ํ ๋ผ์ ๊ณตํต์ ์ด ๋ฌด์์ผ๊น์?
๋ ๋ค ํ ๋ผ๋ผ๋ ์ ์ ๋๋ค.
ํ ๋ผ์ ํน์ง์ 2๊ฐ์ง๋ง ๋ฝ์๋ณด๊ฒ ์ต๋๋ค. ํ ๋ผ๋ ๊นก์ถฉ๊นก์ถฉ ๋ฐ๋ฉฐ, ๋น๊ทผ์ ์ข์ํฉ๋๋ค.
(์ค์ ์ฌ์ค๊ณผ ๋ฌด๊ดํ ์ ์์ต๋๋ค.)
์ฌ๊ธฐ์, ์ ๋ฒ์๊ฐ์ ๋ฐฐ์ ๋ has-a ๊ด๊ณ๋ฅผ ๋ ์ฌ๋ ค ๋ด ์๋ค. 'OO์ OO๋ฅผ ๊ฐ์ง๋ค'๋ผ๋ ๊ฐ๋ ์ด์์ต๋๋ค.
์์์ has-a ๊ด๊ณ์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ํํ is-a๋ผ๊ณ ํฉ๋๋ค. 'OO์ OO์ด๋ค'๋ผ๋ ๊ฐ๋ ์ ๋๋ค.
'์๊ธฐ ํ ๋ผ๋ ํ ๋ผ๋ฅผ ๊ฐ์ง๋ค' vs '์๊ธฐ ํ ๋ผ๋ ํ ๋ผ์ด๋ค.' ์ด๋ค ํํ์ด ์์ฐ์ค๋ฌ์ฐ์ ๊ฐ์?
์๋ง ๋๋ถ๋ถ ํ์๊ฐ ๋ ์์ฐ์ค๋ฝ๋ค๊ณ ๋๋ตํ์ค ๊ฒ๋๋ค. ์ด๋ ๊ฒ is-a ๊ด๊ณ์ผ ๋ ์์์ ์ฌ์ฉํฉ๋๋ค.
ํ ๋ผ๋ผ๋ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ํ ๋ผ๋ผ๋ ํด๋์ค์๋ ๋น๊ทผ์ ๋จน๋ ๋ฉ์๋์ ๊นก์ถฉ๊นก์ถฉ ๋ฐ๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค..
๋ง์ฝ ์๊ธฐํ ๋ผ์ ์๋งํ ๋ผ๊ฐ ์ด ํ ๋ผํด๋์ค๋ฅผ ์์๋ฐ๊ฒ ๋๋ฉด, ๋ฉ์๋๋ฅผ ๋ค์ ์ ์ํ ํ์ ์์ด ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ถํ์ ์๊ธฐํ ๋ผ์ ํ์ ๋ค์ด ๋์ด๋๋, ๋น๊ทผ์ ๋จน๋ ๋ฉ์๋์ ๊นก์ถฉ๊นก์ถฉ ๋ฐ๋ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ํ์๊ฐ ์๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์์ธํ ๊ฑด ์๋์์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๐ฐ
์์(Inheritance)์ ํ๋์ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์์์ ํตํด ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉค๋ฒ (ํ๋์ ๋ฉ์๋)๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํ์์ ๋ฐ๋ผ ์ด๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
๋ถ๋ชจ ํด๋์ค (Superclass) : ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์ ์ ๊ณตํ๋ ํด๋์ค์ ๋๋ค.
์์ ํด๋์ค (SubClass) :๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๋ ํด๋์ค์ ๋๋ค.
extends ํค์๋ :Java์์ ์์์ ์ ์ธํ ๋ ์ฌ์ฉํ๋ ํค์๋์ ๋๋ค.
โค๏ธ์์์ ํน์ง
์ฝ๋ ์ฌ์ฌ์ฉ | ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ด ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. |
ํ์ฅ์ฑ | ๊ธฐ์กด ํด๋์ค๋ฅผ ํ์ฅํ์ฌ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
๋คํ์ฑ(Polymorphism) | ๋ถ๋ชจ ํด๋์ค๋ก ์ ์ธ๋ ๊ฐ์ฒด๊ฐ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์์ด ๋ค์ํ ๊ฐ์ฒด๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์์ต๋๋ค. |
๋จ์ผ ์์ | Java๋ ๋จ์ผ ์์๋ง์ ์ง์ํ๋ฉฐ, ํ ํด๋์ค๋ ์ค์ง ํ๋์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ํ์ง๋ง ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ค์ค ์์์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค์ ๋ํด์๋ ์ถํ์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค. |
๐ฉท์์์ ์ฅ์
- ์ ์ง๋ณด์ ์ฉ์ด : ์ฝ๋์ ์ค๋ณต์ ์ค์ฌ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํฉ๋๋ค.
- ๊ณ์ธต์ ๊ตฌ์กฐ : ๋ ผ๋ฆฌ์ ์ธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฑํ์ฌ ์ฝ๋์ ์ดํด์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ : ๊ธฐ์กด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํ๊ณ ํจ์จ์ฑ์ ๋์ ๋๋ค.
- ๋คํ์ฑ ์ง์ : ๋คํ์ฑ์ ํตํด ์ ์ฐํ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํด์ง๋๋ค.
์์ ์์ )
์์์ ๋ํด์ ์์ ์ ํจ๊ป ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์๋๋ ํ ๋ผ ํด๋์ค , ๋ถ๋ชจ ํด๋์ค์ ๋๋ค (Super Class)
Rabbit.java
// ๋ถ๋ชจ ํด๋์ค
class Rabbit {
public void jump() {
System.out.println("The rabbit jumps.");
}
public void eatCarrot() {
System.out.println("The rabbit eats a carrot.");
}
}
BabyRabbit.java
//์์ ํด๋์ค
class BabyRabbit extends Rabbit {
public void play() {
System.out.println("The baby rabbit plays.");
}
}
MotherRabbit.java
// ์์ ํด๋์ค
class MotherRabbit extends Rabbit {
public void careForBabies() {
System.out.println("The mother rabbit cares for her babies.");
}
}
Main.java
public class Main {
public static void main(String[] args) {
BabyRabbit babyRabbit = new BabyRabbit();
MotherRabbit motherRabbit = new MotherRabbit();
// ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋ ํธ์ถ
babyRabbit.jump();
babyRabbit.eatCarrot();
babyRabbit.play();
// ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋ ํธ์ถ
motherRabbit.jump();
motherRabbit.eatCarrot();
motherRabbit.careForBabies();
}
}
์ด ์์ ์์ ์๊ธฐ ํ ๋ผ๋ง์ ๋ฉ์๋์, ์๋ง ํ ๋ผ๋ง์ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
๋ค๋ง 'jump'์ 'eatCarrot' ๋ฉ์๋๋ ์ฌ์ ์ํ ํ์ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
" ์์ฝ "
- ์์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก, ๊ธฐ์กด ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ด๋ฅผ ํตํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฑํ์ฌ ์ฝ๋์ ๊ด๋ฆฌ์ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- Java์์๋ 'extends' ํค์๋๋ฅผ ์ฌ์ฉํด ์์์ ๊ตฌํํ๋ฉฐ, ๋จ์ผ ์์๋ง์ ์ง์ํฉ๋๋ค.
Java๋ 100% ์์๊ตฌ์กฐ์ ๋๋ค.
๋ชจ๋ ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์๋ฐ๊ณ ์์ต๋๋ค.
์์์ ๋ํด์ ๊ผญ ์์งํด์ฃผ์ธ์!
์ง๋ฌธ์ ์ธ์ ๋ ์ง ๋๊ธ์ ๋จ๊ฒจ์ฃผ์ธ์.
๐ฉต๐ฐ๐ฉต