๊ฐ ์ ๋ฒ์ ์ Java๋ ์ด์ ๋ฒ์ ๊ณผ ๋ค๋ฆ
๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃฌ ์๋ฃ์์ ์ด๋ฌํ ๋ณ๊ฒฝ์ ์๋ก
๋ง์ฐฌ๊ฐ์ง๋ก Java 8์ Java 7๊ณผ ๋์ ๋๊ฒ ๋ค๋ฆ
๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ๋ ์ค์ํ ํ์ ์ ๋ฌด์ํ์ง ์์ ๊ฒ์
๋๋ค.
์ด ๋จ์์์ ์ธํฐํ์ด์ค์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ผ๋ฏ๋ก ์ธ์ด์ ๋ํ ํ ๊ฐ์ง ์
๋ฐ์ดํธ์ธ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค .
์ธํฐํ์ด์ค๊ฐ ๋์์ ๊ตฌํํ์ง ์๋๋ค๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ์์ต๋๋ค . ๊ทธ ๋ชฉ์ ์
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ด๋ค ๋์์ด ์์ด์ผ ํ๋์ง ์ค๋ช
ํ๋ ๊ฒ์
๋๋ค . ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๋ ๋ฉ์๋ ๊ตฌํ์ด ๋ชจ๋ ํด๋์ค์์ ๋์ผํ ์ํฉ์ ์์ฃผ ์ง๋ฉดํ์ต๋๋ค. ์ค๋๋ ์๋์ฐจ์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
enums
Java 5 ์ด์ ์๋ ์ธ์ด๊ฐ ์์์ต๋๋ค.

public interface Car {
public void gas();
public void brake();
}
public class Sedan implements Car {
@Override
public void gas() {
System.out.println("Gas!");
}
@Override
public void brake() {
System.out.println("Brake!");
}
}
public class Truck implements Car {
@Override
public void go() {
System.out.println("Gas!");
}
@Override
public void brake() {
System.out.println("Brake!");
}
}
public class F1Car implements Car {
@Override
public void go() {
System.out.println("Gas!");
}
@Override
public void brake() {
System.out.println("Brake!");
}
}
์ด ์ฝ๋์ ์ฃผ์ ๋ฌธ์ ๋ ๋ฌด์์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ๋น์ ์ ์๋ง๋ ์ฐ๋ฆฌ๊ฐ ๋ง์ ์ค๋ณต ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ ๊ฒ์
๋๋ค! ์ด๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์์ ํํ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ฉฐ ํผํด์ผ ํฉ๋๋ค. Java 8์ด ์ถ์๋๊ธฐ ์ ์๋ ํน๋ณํ ์๋ฃจ์
์ด ์์๋ค๋ ๊ฒ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์
๋๋ค. Java 8์ด ์ถ์๋์์ ๋
๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ ์ ํ๊ณ ์ธํฐํ์ด์ค ๋ด์์ ๋ฐ๋ก ๊ตฌํํ ์ ์๊ฒ ๋์์ต๋๋ค! ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public interface Car {
public default void gas() {
System.out.println("Gas!");
}
public default void brake() {
System.out.println("Brake!");
}
}
public class Sedan implements Car {
}
public class Truck implements Car {
}
public class F1Car implements Car {
}
์ด์ ๋ชจ๋ ์๋์ฐจ์ ๋์ผํ๋
gas()
๋ฐ
brake()
๋ฉ์๋๊ฐ ์ธํฐํ์ด์ค๋ก ์ด๋๋์ด ์ค๋ณต ์ฝ๋๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋๋ ๊ฐ ํด๋์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค!
public class Main {
public static void main(String[] args) {
F1Car f1Car = new F1Car();
Sedan sedan = new Sedan();
Truck truck = new Truck();
truck.gas();
sedan.gas();
f1Car.brake();
}
}
๋ฉ์๋ ๊ฐ ์๋ 100๊ฐ์ ํด๋์ค๊ฐ ์์ง๋ง
gas()
๊ทธ ์ค 99๊ฐ๋ง ๋์ผํ ๋์์ ๊ฐ์ ธ์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๊ทธ๊ฒ ๋ชจ๋ ๊ฒ์ ๋ง์น๋์? ์ด ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ด ์๋ํ์ง ์์ต๋๊น? ๋ฌผ๋ก ์๋๋๋ค :) ๊ธฐ๋ณธ ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
public class UnusualCar implements Car {
@Override
public void go() {
System.out.println("This car accelerates differently!");
}
@Override
public void brake() {
System.out.println("This car slows down differently!");
}
}
๋ค๋ฅธ 99๊ฐ ์ ํ์ ์๋์ฐจ๋ ๋ชจ๋ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง๋ง
UnusualCar
ํด๋์ค๋ ์์ธ์
๋๋ค. ํฐ ๊ทธ๋ฆผ์ ๋ง์น์ง ์๊ณ ์นจ์ฐฉํ๊ฒ ์์ ์ ํ๋์ ์ ์ํฉ๋๋ค. ์ธํฐํ์ด์ค์ ๋ค์ค ์์. ์ด๋ฏธ ์๊ณ ์๋ฏ์ด Java์๋ ๋ค์ค ์์์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. ๋ณ๋์ ๊ฐ์์์ ์์ธํ ์ดํด๋ณผ ๊ฒ์
๋๋ค. C++์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์์๋ ์ํฉ์ด ๋ฐ๋์
๋๋ค. ๋์ผํ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ํน์ฑ๊ณผ ๋์์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ๋ค์ค ์์์ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ ์ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ๋ถ๋ชจ์๊ฒ ์๋
, ๊ต์ฌ์๊ฒ ํ์, ์์ฌ์๊ฒ ํ์์
๋๋ค. ์ค์ํ์์ ์ฐ๋ฆฌ๋ ๋ค์ํ ์ญํ ์ ์ํํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํ๋ํฉ๋๋ค. ๋ถ๋ช
ํ ์ฐ๋ฆฌ๋ ์นํ ์น๊ตฌ์ ๋ค๋ฅด๊ฒ ๊ต์ฌ์ ์ํธ ์์ฉํฉ๋๋ค. ์ด ์ํฉ์ ์ฝ๋๋ก ๋ณํํด ๋ด
์๋ค. Pond์ Aviary๋ผ๋ ๋ ๊ฐ์ ํด๋์ค๊ฐ ์๋ค๊ณ ์์ํด ๋ด
์๋ค. ์ฐ๋ชป์๋ ํค์์น๋ ์๊ฐ ํ์ํ๊ณ ์์ฅ์๋ ๋ ์๋ค๋๋ ์๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๋ ๊ฐ์ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค.
FlyingBird
๊ทธ๋ฆฌ๊ณ
Waterfowl
.
public class Waterfowl {
}
public class FlyingBird {
}
๋ฐ๋ผ์ ๋ฌผ๋ ค๋ฐ์ ์๋ ์กฐ๋ฅ ์ฌ์ก์ฅ์ผ๋ก ๋ณด๋ด๊ณ
FlyingBird
ํ์๋ ์๋
Waterfowl
์ฐ๋ชป์ผ๋ก ๊ฐ๋๋ค. ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จ ํด ๋ณด์
๋๋ค. ํ์ง๋ง ์ด๋์ ๊ฐ ์ค๋ฆฌ๋ฅผ ์ ์ํด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ค๋ฆฌ๋ ํค์์น๊ณ ๋ ๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ค์ค ์์์ด ์์ต๋๋ค. ๋คํ์ค๋ฝ๊ฒ๋ Java๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค ๊ตฌํ์ ์ง์ํฉ๋๋ค. ํด๋์ค๊ฐ ์ฌ๋ฌ ๋ถ๋ชจ๋ฅผ ์์ํ ์ ์๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ฝ์ต๋๋ค! ์ฐ๋ฆฌ ์ค๋ฆฌ๋ ๋ ์๋ค๋๋ ์์ผ ์๋ ์๊ณ ํค์์น๋ ์์ผ ์๋ ์์ต๋๋ค :) ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ํด๋์ค๊ฐ ์๋ make
FlyingBird
์ ์ธํฐํ์ด์ค๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
Waterfowl
public class Duck implements FlyingBird, Waterfowl {
// Methods of both interfaces combine easily into one class
@Override
public void fly() {
System.out.println("Flying!");
}
@Override
public void swim() {
System.out.println("Swimming!");
}
}
์ด๊ฒ์ ์ฐ๋ฆฌ ํ๋ก๊ทธ๋จ์ด ์์
์ ์ ์ฐํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๋ฅ๋ ฅ์ ์ ์งํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ๊ณผ ๊ฒฐํฉํ๋ฉด ๊ฐ์ฒด์ ๋์์ ๊ฒฐ์ ํ๋ ๋ฅ๋ ฅ์ด ๊ฑฐ์ ๋ฌดํํด์ง๋๋ค! :)
GO TO FULL VERSION