OOP ๊ด๋ จ ์ง๋ฌธ์ IT ํ์ฌ์ Java ๊ฐ๋ฐ์ ์์น์ ๋ํ ๊ธฐ์ ์ธํฐ๋ทฐ์ ํ์์ ์ธ ๋ถ๋ถ์
๋๋ค. ์ด ๊ธฐ์ฌ์์ ์ฐ๋ฆฌ๋ OOP์ ํ ๊ฐ์ง ์์น์ธ ๋คํ์ฑ์ ๋ํด ์ด์ผ๊ธฐํ ๊ฒ์
๋๋ค. ์ธํฐ๋ทฐ ์ค์ ์์ฃผ ๋ฌป๋ ์ธก๋ฉด์ ์ด์ ์ ๋ง์ถ๊ณ ๋ช
ํ์ฑ์ ์ํด ๋ช ๊ฐ์ง ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Java์ ๋คํ์ฑ์ด๋ ๋ฌด์์ ๋๊น?
๋คํ์ฑ์ ๊ฐ์ฒด์ ํน์ ์ ํ์ ๋ํ ์ ๋ณด ์์ด ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ ๋๋ค. ๋คํ์ฑ์ด ๋ฌด์์ธ์ง์ ๋ํ ์ง๋ฌธ์ ๋๋ตํ๋ ๊ฒฝ์ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ค๋ช ํ๋ผ๋ ์์ฒญ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ๋ง์ ์ถ๊ฐ ์ง๋ฌธ์ ์ ๋ฐํ์ง ์๊ณ ๋ค์ ํ ๋ฒ ๋ฉด์ ๊ด์ ์ํด ๋ชจ๋ ๊ฒ์ ๋ฐฐ์นํ์ญ์์ค. OOP ์ ๊ทผ ๋ฐฉ์์๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฐ์ฒด ๊ฐ์ ์ํธ ์์ฉ์ ๊ธฐ๋ฐ์ผ๋ก Java ํ๋ก๊ทธ๋จ์ ๋น๋ํ๋ ์์ ์ด ํฌํจ๋๋ค๋ ์ฌ์ค๋ถํฐ ์์ํ ์ ์์ต๋๋ค. ํด๋์ค๋ ํ๋ก๊ทธ๋จ์์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ์ด์ ์ ์์ฑ๋ ์ฒญ์ฌ์ง(ํ ํ๋ฆฟ)์ ๋๋ค. ๋ํ ํด๋์ค์๋ ํญ์ ํน์ ์ ํ์ด ์์ผ๋ฉฐ ์ข์ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ์ฌ์ฉํ๋ฉด ํด๋น ๋ชฉ์ ์ ์ ์ํ๋ ์ด๋ฆ์ด ์์ต๋๋ค. ๋ํ Java๋ ๊ฐ๋ ฅํ ํ์์ด๋ฏ๋ก ํ๋ก๊ทธ๋จ ์ฝ๋๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ ํญ์ ๊ฐ์ฒด ํ์์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์๊ฒฉํ ํ์ดํ์ด ์ฝ๋ ๋ณด์๊ณผ ์์ ์ฑ์ ํฅ์์ํค๊ณ ์ปดํ์ผ ์์๋ ํธํ๋์ง ์๋ ์ ํ(์: ๋ฌธ์์ด์ ์ซ์๋ก ๋๋๊ธฐ ์๋)์ผ๋ก ์ธํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ์ฌ์ค์ ์ถ๊ฐํฉ๋๋ค. ๋น์ฐํ ์ปดํ์ผ๋ฌ๋ "์๊ณ " ์์ด์ผ ํฉ๋๋ค. ์ ์ธ๋ ์ ํ โ JDK์ ํด๋์ค์ด๊ฑฐ๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ง๋ ํด๋์ค์ผ ์ ์์ต๋๋ค. ๋ฉด์ ๊ด์๊ฒ ์ฐ๋ฆฌ ์ฝ๋๋ ์ ์ธ์ ํ์๋ ์ ํ์ ๊ฐ์ฒด๋ฟ๋ง ์๋๋ผ ๊ทธ ์์๋ ์ฌ์ฉํ ์ ์์์ ์ง์ ํ์ญ์์ค.์ด๊ฒ์ ์ค์ํ ์ ์ ๋๋ค. ์ฌ๋ฌ ์ ํ์ ๋จ์ผ ์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค(์ด๋ฌํ ์ ํ์ด ๊ธฐ๋ณธ ์ ํ์์ ํ์๋ ๊ฒฝ์ฐ). ์ด๋ ๋ํ ์ ํ์ด ์ํผํด๋์ค์ธ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ํด๋น ๋ณ์์ ํ์ ํญ๋ชฉ ์ค ํ๋์ ์ธ์คํด์ค๋ฅผ ํ ๋นํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ฉด์ ๊ด์ด ์ข์ํ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ํด๋์ค(๊ธฐ๋ณธ ํด๋์ค)์์ ๊ณต์ ํ ์ ์๋ ์ผ๋ถ ํด๋์ค๋ฅผ ์ ํํ๊ณ ๊ทธ ์ค ๋ช ๊ฐ๊ฐ ์์ํ๋๋ก ํฉ๋๋ค. ๊ธฐ๋ณธ ํด๋์ค:
public class Dancer {
private String name;
private int age;
public Dancer(String name, int age) {
this.name = name;
this.age = age;
}
public void dance() {
System.out.println(toString() + " I dance like everyone else.");
}
@Override
public String toString() {
Return "I'm " + name + ". I'm " + age + " years old.";
}
}
ํ์ ํด๋์ค์์ ๊ธฐ๋ณธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํฉ๋๋ค.
public class ElectricBoogieDancer extends Dancer {
public ElectricBoogieDancer(String name, int age) {
super(name, age);
}
// Override the method of the base class
@Override
public void dance() {
System.out.println(toString () + " I dance the electric boogie!");
}
}
public class Breakdancer extends Dancer {
public Breakdancer(String name, int age) {
super(name, age);
}
// Override the method of the base class
@Override
public void dance() {
System.out.println(toString() + " I breakdance!");
}
}
๋คํ์ฑ์ ์์ ์ด๋ฌํ ๊ฐ์ฒด๊ฐ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ:
public class Main {
public static void main(String[] args) {
Dancer dancer = new Dancer("Fred", 18);
Dancer breakdancer = new Breakdancer("Jay", 19); // Widening conversion to the base type
Dancer electricBoogieDancer = new ElectricBoogieDancer("Marcia", 20); // Widening conversion to the base type
List<dancer> disco = Arrays.asList(dancer, breakdancer, electricBoogieDancer);
for (Dancer d : disco) {
d.dance(); // Call the polymorphic method
}
}
}
์ฃผ์ ๋ฐฉ๋ฒ ์์ ๋ค์ ํ์ ๋ณด์ฌ์ค๋๋ค.
Dancer breakdancer = new Breakdancer("Jay", 19);
Dancer electricBoogieDancer = new ElectricBoogieDancer("Marcia", 20);
์ํผํด๋์ค์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ํ์ ํด๋์ค ์ค ํ๋์ ์ธ์คํด์ค์ธ ๊ฐ์ฒด๋ฅผ ํ ๋นํฉ๋๋ค. ๋๋ถ๋ถ ํ ๋น ์ฐ์ฐ์์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ์ ์ธ๋ ์ ํ์ ๋ถ์ผ์น๋ก ์ธํด ์ปดํ์ผ๋ฌ๊ฐ ๋ค์งํ์ง ์๋ ์ด์ ๋ฅผ ๋ฌผ์ ๊ฒ์
๋๋ค. ๊ฒฐ๊ตญ Java๋ ๊ฐ๋ ฅํ ์ ํ์
๋๋ค. ํ์ฅ ์ ํ ๋ณํ์ด ์ฌ๊ธฐ์ ์๋ํ๋ค๊ณ ์ค๋ช
ํฉ๋๋ค. ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ ๊ธฐ๋ณธ ํด๋์ค์ ๋ํ ์ฐธ์กฐ์ฒ๋ผ ์ทจ๊ธ๋ฉ๋๋ค. ๋ํ ์ฝ๋์์ ์ด๋ฌํ ๊ตฌ์ฑ์ ๋ง๋๋ฉด ์ปดํ์ผ๋ฌ๋ ์๋์ผ๋ก ์์์ ์ผ๋ก ๋ณํ์ ์ํํฉ๋๋ค. ์ํ ์ฝ๋๋ ํ ๋น ์ฐ์ฐ์( Dancer ) ์ ์ผ์ชฝ์ ์ ์ธ๋ ์ ํ์ด ์ค๋ฅธ์ชฝ ( Breakdancer , ElectricBoogieDancer ) ์ ์ ์ธ๋ ์ฌ๋ฌ ํ์(์ ํ)์ ๊ฐ์ง๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค.). ๊ฐ ์์์ ์ํผํด๋์ค( ๋์ค ๋ฉ์๋) ์ ์ ์๋ ์ผ๋ฐ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จํ์ฌ ๊ณ ์ ํ ๋์์ ๊ฐ์ง ์ ์์ต๋๋ค . ์ฆ, ์์ ํด๋์ค์์ ์ ์ธ๋ ๋ฉ์๋๋ ํ์ ํด๋์ค์์ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ค๋ฃจ๊ณ ์๋๋ฐ, ์ด๋ ์ ํํ ์ฌ๋ฌ ํผ(๋์)์ ์์ฑํ๋ ๊ฒ์
๋๋ค. ์ด๋ ๋ฉ์ธ ๋ฉ์๋์์ ์ฝ๋๋ฅผ ์คํํ์ฌ ๋ณผ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ ์ถ๋ ฅ: I'm Fred. ์ ๋ 18 ์ด์
๋๋ค. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ฒ๋ผ ์ถค์ ์ถฅ๋๋ค. ์ ๋ ์ ์ด์
๋๋ค. ๋๋ 19 ์ด์
๋๋ค. ๋๋ ๋ธ๋ ์ดํฌ ๋์ค๋ฅผ ์ถ๋ค! ์ ๋ ๋ง๋ฅด์์์
๋๋ค. ๋ด ๋์ด๋ 20 ์ด์
๋๋ค. ๋๋ ์ผ๋ ํธ๋ฆญ ๋ถ๊ธฐ๋ฅผ ์ถ๋ค! ํ์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ๋์์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,ElectricBoogieDancer ํด๋์ค์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. I'm Fred. ์ ๋ 18 ์ด์
๋๋ค. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ฒ๋ผ ์ถค์ ์ถฅ๋๋ค. ์ ๋ ์ ์ด์
๋๋ค. ๋๋ 19 ์ด์
๋๋ค. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ฒ๋ผ ์ถค์ ์ถฅ๋๋ค. ์ ๋ ๋ง๋ฅด์์์
๋๋ค. ๋ด ๋์ด๋ 20 ์ด์
๋๋ค. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ฒ๋ผ ์ถค์ ์ถฅ๋๋ค. ์ด๋ Breakdancer ๋ฐ ElectricBoogieDancer ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค . ๋คํ์ฑ์ ์๋ฆฌ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋์ ๋ช
์๋์ด ์์ต๋๊น? ํน์ ์ ํ์ ๋ํ ์ง์ ์์ด ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ ์ด๋์ ์์ต๋๊น? ์ด ์์ ์์๋ Dancer d ๊ฐ์ฒด์์ dance() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๋ฐ์ํฉ๋๋ค . Java์์ ๋คํ์ฑ์ด๋ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ฒด๊ฐ ๊ฐ์ฒด์ธ์ง ์ฌ๋ถ๋ฅผ ์ ํ์๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. Breakdancer ๋๋ ElectricBoogieDancer . ์ค์ํ ๊ฒ์ Dancer ํด๋์ค ์ ํ์์ด๋ผ๋ ๊ฒ์
๋๋ค . ๊ทธ๋ฆฌ๊ณ ์์์ ์ธ๊ธํ๋ ๊ฒฝ์ฐ Java์ ์์์ extends ๋ฟ๋ง ์๋๋ผ ๊ตฌํ. ์ด์ Java๊ฐ ๋ค์ค ์์์ ์ง์ํ์ง ์๋๋ค๋ ์ ์ ์ธ๊ธํ ๋์
๋๋ค. ๊ฐ ์ ํ์ ํ๋์ ๋ถ๋ชจ(์ํผํด๋์ค)์ ๋ฌด์ ํ์ ์์(์๋ธํด๋์ค)์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค๋ ์ฌ๋ฌ ๊ธฐ๋ฅ ์งํฉ์ ํด๋์ค์ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ ํด๋์ค(์์)์ ๋น๊ตํ ๋ ์ธํฐํ์ด์ค๋ ์์ ํด๋์ค์ ๋ ๊ฒฐํฉ๋ฉ๋๋ค. ๊ทธ๋ค์ ๋งค์ฐ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. Java์์ ์ธํฐํ์ด์ค๋ ์ฐธ์กฐ ์ ํ์ด๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์ธํฐํ์ด์ค ์ ํ์ ๋ณ์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ์ด์ ์๋ฅผ ๋ค์ด๋ณผ ์ฐจ๋ก์
๋๋ค. ์ธํฐํ์ด์ค ๋ง๋ค๊ธฐ:
public interface CanSwim {
void swim();
}
๋ช
ํ์ฑ์ ์ํด ๊ด๋ จ ์๋ ๋ค์ํ ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํฉ๋๋ค.
public class Human implements CanSwim {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public void swim() {
System.out.println(toString()+" I swim with an inflated tube.");
}
@Override
public String toString() {
return "I'm " + name + ". I'm " + age + " years old.";
}
}
public class Fish implements CanSwim {
private String name;
public Fish(String name) {
this.name = name;
}
@Override
public void swim() {
System.out.println("I'm a fish. My name is " + name + ". I swim by moving my fins.");
}
public class UBoat implements CanSwim {
private int speed;
public UBoat(int speed) {
this.speed = speed;
}
@Override
public void swim() {
System.out.println("I'm a submarine that swims through the water by rotating screw propellers. My speed is " + speed + " knots.");
}
}
์ฃผ์ ๋ฐฉ๋ฒ:
public class Main {
public static void main(String[] args) {
CanSwim human = new Human("John", 6);
CanSwim fish = new Fish("Whale");
CanSwim boat = new UBoat(25);
List<swim> swimmers = Arrays.asList(human, fish, boat);
for (Swim s : swimmers) {
s.swim();
}
}
}
์ธํฐํ์ด์ค์ ์ ์๋ ๋คํ์ฑ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ ํ์ ๋์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๋ค์ swim ๋ฉ์๋ ์ ์ํด ํ์๋๋ ๋ค๋ฅธ ๋ฌธ์์ด์
๋๋ค . ์ฐ๋ฆฌ์ ์์ ๋ฅผ ๊ณต๋ถํ ํ ๋ฉด์ ๊ด์ ์ ์ด ์ฝ๋๋ฅผ ๋ฉ์ธ ๋ฉ์๋ ์์ ์คํํ๋์ง ๋ฌผ์ ์ ์์ต๋๋ค.
for (Swim s : swimmers) {
s.swim();
}
ํ์ ํด๋์ค์ ์ ์๋ ์ฌ์ ์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋๋ก ํฉ๋๊น? ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋ฉ์๋์ ์ํ๋ ๊ตฌํ์ ์ด๋ป๊ฒ ์ ํ๋ฉ๋๊น? ์ด๋ฌํ ์ง๋ฌธ์ ๋ตํ๋ ค๋ฉด ํ๊ธฐ(๋์ ) ๋ฐ์ธ๋ฉ์ ์ค๋ช
ํด์ผ ํฉ๋๋ค. ๋ฐ์ธ๋ฉ์ด๋ ๋ฉ์๋ ํธ์ถ๊ณผ ํด๋น ํน์ ํด๋์ค ๊ตฌํ ๊ฐ์ ๋งคํ์ ์ค์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ฝ๋๋ ํด๋์ค์ ์ ์๋ ์ธ ๊ฐ์ง ๋ฉ์๋ ์ค ์คํ๋ ๋ฉ์๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. Java๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ธฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ์ด๊ธฐ ๋ฐ์ธ๋ฉ์ ๊ฒฝ์ฐ์ฒ๋ผ ์ปดํ์ผ ํ์์ด ์๋๋ผ ๋ฐํ์์ ๋ฐ์ธ๋ฉ์ด ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ ์ปดํ์ผ๋ฌ๊ฐ ์ด ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋
for (Swim s : swimmers) {
s.swim();
}
์ด๋ค ํด๋์ค( Human , Fish ๋๋ Uboat )์ ์์ ํ ๋ ์คํ๋ ์ฝ๋๊ฐ ์๋์ง ์ ์ ์์ต๋๋ค.๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ด๋ ๋์ ๋ฐ์ธ๋ฉ ๋ฉ์ปค๋์ฆ ๋๋ถ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋๋ง ๊ฒฐ์ ๋ฉ๋๋ค(๋ฐํ์์ ๊ฐ์ฒด ์ ํ์ ํ์ธํ๊ณ ์ด ์ ํ์ ๋ํ ์ฌ๋ฐ๋ฅธ ๊ตฌํ ์ ํ). ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ๋ฌป๋๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ก๋ํ๊ณ ์ด๊ธฐํํ ๋ JVM์ด ๋ฉ๋ชจ๋ฆฌ์ ํ
์ด๋ธ์ ๋ง๋ค๊ณ ๋ณ์๋ฅผ ๊ฐ๊ณผ ์ฐ๊ฒฐํ๊ณ ๊ฐ์ฒด๋ฅผ ๋ฉ์๋์ ์ฐ๊ฒฐํ๋ค๊ณ ๋๋ตํ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์์ ํด๋์ค๊ฐ ์์๋๊ฑฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ์ฌ์ ์๋ ๋ฉ์๋๊ฐ ์๋์ง ํ์ธํ๋ ๊ฒ์
๋๋ค. ์๋ ๊ฒฝ์ฐ ์ด ํ์์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ผ์นํ๋ ๋ฉ์๋ ๊ฒ์์ ํ ๋จ๊ณ ๋์ ํด๋์ค(๋ถ๋ชจ)๋ก ์ด๋ํ๋ ์์ผ๋ก ๋ค๋จ๊ณ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ฃจํธ๊น์ง ์ด๋ํฉ๋๋ค. OOP์ ๋คํ์ฑ๊ณผ ์ฝ๋์์์ ๊ตฌํ์ ๊ดํด์๋ ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ํด๋์ค์ ์ถ์ ์ ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ถ์ํ ์์น(์ผ๋ฐ์ ์ธ ๋์ ๋ฐ ์์ฑ์ ์๋ณํ์ฌ ์ถ์ ํด๋์ค์ ๋ฃ๊ฑฐ๋ ์ผ๋ฐ์ ์ธ ๋์๋ง ์๋ณํ์ฌ ์ธํฐํ์ด์ค์ ๋ฃ๊ธฐ)์ ๋ฐ๋ฆ
๋๋ค. ๋คํ์ฑ์ ๊ตฌํํ๋ ค๋ฉด ์ธํฐํ์ด์ค ๋ฐ ํด๋์ค ์์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ์์ฑํด์ผ ํฉ๋๋ค. Java์ ๋คํ์ฑ ๋ฐ ํ์ ๊ณผ ๊ด๋ จํ์ฌ Java 8๋ถํฐ ์ถ์ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ๋ ๋๋ ์ผ๋ฐ์ ์ธ ๋์๋ง ์๋ณํ๊ณ ์ธํฐํ์ด์ค์ ๋ฃ์ต๋๋ค. ๋คํ์ฑ์ ๊ตฌํํ๋ ค๋ฉด ์ธํฐํ์ด์ค ๋ฐ ํด๋์ค ์์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ์์ฑํด์ผ ํฉ๋๋ค. Java์ ๋คํ์ฑ ๋ฐ ํ์ ๊ณผ ๊ด๋ จํ์ฌ Java 8๋ถํฐ ์ถ์ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ๋ ๋๋ ์ผ๋ฐ์ ์ธ ๋์๋ง ์๋ณํ๊ณ ์ธํฐํ์ด์ค์ ๋ฃ์ต๋๋ค. ๋คํ์ฑ์ ๊ตฌํํ๋ ค๋ฉด ์ธํฐํ์ด์ค ๋ฐ ํด๋์ค ์์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ์์ฑํด์ผ ํฉ๋๋ค. Java์ ๋คํ์ฑ ๋ฐ ํ์ ๊ณผ ๊ด๋ จํ์ฌ Java 8๋ถํฐ ์ถ์ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ๋๊ธฐ๋ณธ ํด๋์ค์ ์ถ์ ๋ฉ์๋์ ๋ํ ๊ธฐ๋ณธ ๊ตฌํ์ ์์ฑํ๋ default ํค์๋์
๋๋ค. ์๋ฅผ ๋ค์ด:
public interface CanSwim {
default void swim() {
System.out.println("I just swim");
}
}
๋๋๋ก ๋ฉด์ ๊ด์ ๋คํ์ฑ ์์น์ด ์๋ฐ๋์ง ์๋๋ก ๊ธฐ๋ณธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ์ธํด์ผ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ง๋ฌธํฉ๋๋ค. ๋๋ต์ ๊ฐ๋จํฉ๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ static , private ๋๋ final ์ด ์๋์ด์ผ ํฉ๋๋ค . Private์ ํด๋์ค ๋ด์์๋ง ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฏ๋ก ํ์ ํด๋์ค์์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์ ์ ์ ๋ฉ์๋๋ฅผ ๊ฐ์ฒด๊ฐ ์๋ ํด๋์ค์ ์ฐ๊ฒฐํ๋ฏ๋ก ์ํผํด๋์ค์ ๋ฉ์๋๊ฐ ํญ์ ํธ์ถ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ final์ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ณ ํ์ ํด๋์ค์์ ์จ๊ธธ ์ ์๋๋ก ํฉ๋๋ค.
๋คํ์ฑ์ ์ฐ๋ฆฌ์๊ฒ ๋ฌด์์ ์ ๊ณตํฉ๋๊น?
๋ํ ๋คํ์ฑ์ด ์ฐ๋ฆฌ์๊ฒ ์ด๋ค ์ด์ ์ด ์๋์ง์ ๋ํ ์ง๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ณต์กํ ์ธ๋ถ ์ฌํญ์ ์ฝ๋งค์ด์ง ์๊ณ ๊ฐ๋จํ ๋๋ตํ ์ ์์ต๋๋ค.- ํด๋์ค ๊ตฌํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ํ ์คํธ๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ํ์ฅ์ฑ์ ์ฉ์ดํ๊ฒ ํ์ฌ ๋ฏธ๋์ ๊ตฌ์ถํ ์ ์๋ ๊ธฐ๋ฐ์ ํจ์ฌ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๊ธฐ์กด ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ OOP ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๊ณตํต ์ ํ ๋๋ ๋์์ ๊ณต์ ํ๋ ๊ฐ์ฒด๋ฅผ ํ๋์ ์ปฌ๋ ์ ๋๋ ๋ฐฐ์ด๋ก ๊ฒฐํฉํ๊ณ ๊ท ์ผํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค(์์ ์์์ ๊ฐ์ด ๋ชจ๋ ์ฌ๋์ด ๊ฐ์ ๋ก dance() ๋๋ swim() ์ ์ํํ๋๋ก ํ์ต๋๋ค :)
- ์๋ก์ด ์ ํ ์์ฑ์ ์ ์ฐ์ฑ: ๋ถ๋ชจ์ ๋ฉ์๋ ๊ตฌํ์ ์ ํํ๊ฑฐ๋ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
์ผ๋ถ ์ด๋ณ์ ๋ง
๋คํ์ฑ์ ๋งค์ฐ ์ค์ํ๊ณ ๊ด๋ฒ์ํ ์ฃผ์ ์ ๋๋ค. Java์ OOP์ ๋ํ ์ด ๊ธฐ์ฌ์ ๊ฑฐ์ ์ ๋ฐ์ ์ฃผ์ ์ด๋ฉฐ ์ธ์ด ๊ธฐ๋ฐ์ ์๋น ๋ถ๋ถ์ ํ์ฑํฉ๋๋ค. ์ธํฐ๋ทฐ์์ ์ด ์์น์ ์ ์ํ๋ ๊ฒ์ ํผํ ์ ์์ ๊ฒ์ ๋๋ค. ๋ชจ๋ฅด๊ฑฐ๋ ์ดํด๊ฐ ์ ๋๋ฉด ์๋ง ๋ฉด์ ์ด ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒ์ผ๋ฅด์ง ๋ง์ญ์์ค. ์ธํฐ๋ทฐ ์ ์ ์ง์์ ํ๊ฐํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์๋ก ๊ณ ์น์ญ์์ค.
๋ ์ฝ์ด๋ณด๊ธฐ: |
---|
GO TO FULL VERSION