์ถ์ํด๋์ค ์ธํฐํ์ด์ค ์... ์ฌ์ฉํ ๊น?
์ฐ๋ฆฌ๋ ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ํด์ ์๊ณ ์๋๊ณ ๋๊ฐ ๋ฌผ์ด๋ณธ๋ค๋ฉด ์๊ณ ์๋ค๊ณ ๋๋ต์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ก ์ ์ธ ๋ด์ฉ ๋ง๊ณ ์ ์ "์ ์ฌ์ฉํ๋์?", "์ฐจ์ด์ ์ด ๋ญ๊ฐ์?", "์ถ์ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ง ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ง ์ด๋ป๊ฒ ์ ํ๋์?" ์ด๋ฐ ์ค๋ฌด์ ์ธ ์ง๋ฌธ์ด ๋ค์ด์ค๋ฉด ์์ํ๊ฒ ๋๋ตํ๊ธฐ๊ฐ ์๊ฐ๋ณด๋ค ํ๋ค๊ฒ๋๋ค. ํ๋์ จ๊ธฐ ๋๋ฌธ์ ์ง๊ธ ์ด ๊ธ์ ์ฝ๊ณ ๊ณ์ค๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ ๋ง์ฐฌ๊ฐ์ง์๊ณ ๋จ์ํ ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค๊ฐ ๋ฌด์์ธ์ง ๋ณด๋ค ์ ์ฌ์ฉํ๋์ง๊ฐ ๊ถ๊ธํ์ จ๋ค๋ฉด ์๋ ์ ์๊ฐ๋ค์ ์ฒ์ฒํ ์ฝ์ด์ฃผ์๋ฉด ๋์์ด ๋ ์ ์์๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค.
์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค๊ฐ ๋ฌด์์ธ์ง ์์๋ด ์๋ค.
์ถ์ํด๋์ค๋?
์ถ์ํด๋์ค๋ ์ผ๋ฐ ํด๋์ค์ ๋ณ ๋ค๋ฅผ ๊ฒ์ด ์์ต๋๋ค. ๋จ์ง, ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธํ์ฌ ์์์ ํตํด์ ์์ ํด๋์ค์์ ์์ฑํ๋๋ก ์ ๋ํ๋ ํด๋์ค์ ๋๋ค. ๊ทธ๋์ ๋ฏธ์์ฑ ์ค๊ณ๋๋ผ๊ณ ๋ ํํํฉ๋๋ค. ์์์ ์ํ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
class ์์ "abstract" ์์ฝ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ํตํด์ ๊ตฌํํด์ผํ๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ณ ์ ์ธ๋ถ๋ง ์์ฑํ๋ ์ถ์๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
1
2
3
4
|
abstract class ํด๋์ค์ด๋ฆ {
...
public abstract void ๋ฉ์๋์ด๋ฆ();
}
|
์ธํฐํ์ด์ค๋?
์ถ์ํด๋์ค๊ฐ ๋ฏธ์์ฑ ์ค๊ณ๋๋ผ๋ฉด ์ธํฐํ์ด์ค๋ ๊ธฐ๋ณธ ์ค๊ณ๋๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ ์ถ์ํด๋์ค์ฒ๋ผ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ฑํ๋๋ฐ ๋์์ ์ฃผ๋ ๋ชฉ์ ์ผ๋ก ์์ฑํ๊ณ ํด๋์ค์ ๋ค๋ฅด๊ฒ ๋ค์ค์์(๊ตฌํ)์ด ๊ฐ๋ฅํฉ๋๋ค.
1
2
3
4
|
interface ์ธํฐํ์ด์ค์ด๋ฆ {
public static final ์์์ด๋ฆ = ๊ฐ;
public abstract void ๋ฉ์๋์ด๋ฆ();
}
|
์ถ์ํด๋์ค VS ์ธํฐํ์ด์ค ์ฐจ์ด์
์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ๊ณตํต์ ์ ์ถ์๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ผ ์ ๊ตณ์ด 2๊ฐ์ง๋ก ๋๋ ์ ์ฌ์ฉํ ๊น์? ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณด๋ฉด ์ถ์ํด๋์ค๊ฐ ์ธํฐํ์ด์ค์ ์ญํ ์ ๋ค ํ ์ ์๋๋ฐ ์ ๊ตณ์ด ์ธํฐํ์ด์ค๋ผ๋๊ฒ ์๋ ๊ฑธ๊น์?
์ด๋ก ์ ์ธ ์ฐจ์ด์ ์ ๋ค ์ ์ธํ๊ณ ๋๊ฐ๋ก ๋๋ ์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ฌ์ฉ์ฉ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
1. ์ฌ์ฉ์๋ ์ฐจ์ด์
์ถ์ํด๋์ค๋ IS - A "~์ด๋ค".
์ธํฐํ์ด์ค๋ HAS - A "~์ ํ ์ ์๋".
์ด๋ ๊ฒ ๊ตฌ๋ถํ๋ ์ด์ ๋ ๋ค์ค์์์ ๊ฐ๋ฅ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฉ๋๋ฅผ ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฐ์ ํน์ฑ์ ํ๊ฐ์ ํด๋์ค๋ง ์์์ด ๊ฐ๋ฅํ์ฌ ํด๋น ํด๋์ค์ ๊ตฌ๋ถ์ ์ถ์ํด๋์ค ์์์ ํตํด ํด๊ฒฐํ๊ณ , ํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ธํฐํ์ด์ค๋ก ๊ตฌํํฉ๋๋ค.
์ด๋ ๊ฒ ๊ธ๋ก ํํํ์ฌ ์ดํด๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์๋ ์์ ๋ฅผ ํตํด ๋ ์์ธํ๊ฒ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
2. ๊ณตํต๋ ๊ธฐ๋ฅ ์ฌ์ฉ ์ฌ๋ถ
๋ง์ฝ ๋ชจ๋ ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ๊ธฐ๋ณธ ํ์ ๊ตฌ์ฑํ๋ค๋ฉด... ๊ณตํต์ผ๋ก ํ์ํ ๊ธฐ๋ฅ๋ค๋ ๋ชจ๋ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ฌ ์ฌ์ ์ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ์ด๋ ๊ฒ ๊ณตํต๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ฉด ์ถ์ํด๋์ค๋ฅผ ์ด์ฉํด์ ์ผ๋ฐ ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ์์ ํด๋์ค์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฉด ๋๋ค. ์ด!? ๊ทธ๋ฌ๋ฉด ๊ทธ๋ฅ ์ถ์ํด๋์ค๋ง ์ฌ์ฉํ๋ฉด ๋๋ ๊ฑฐ ์๋๊ฐ์? ์์์ ์๊ธฐ ํ๋ฏ์ด ์๋ฐ๋ ํ๋์ ํด๋์ค๋ง ์์์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ง์ฝ ๊ฐ๊ฐ ๋ค๋ฅธ ์ถ์ํด๋์ค๋ฅผ ์์ํ๋๋ฐ ๊ณตํต๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ฉด? ํด๋น ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ก ์์ฑํด์ ๊ตฌํํ๋๊ฒ ํธํ๊ฒ ์ฃ ?
์๋ฌด๋๋ ๊ธ๋ก๋ง ์ค๋ช ํ๋๋ฐ๋ ํ๊ณ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ ์์ ๋ฅผ ํตํด ์ด๋ป๊ฒ ์ธ์ ๋ฌด์์ ์ฌ์ฉํด์ผํ ์ง ์์ ๋ณด๋๋ก ํฉ์๋ค.
์ถ์ํด๋์ค ์ธํฐํ์ด์ค ์์ (์๋ช ์ฒด)
์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฐ๋ ์์ ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ธ๊ฐ๊ณผ ๋๋ฌผ์ ์๋ช ์ฒด๋ฅผ ์์ํ๊ณ ๊ฐ ์๋ช ์ฒด๋ค์ ๊ตฌ๋ถ์ ๋ฐ๋ผ ์ธ๊ฐ๊ณผ ๋๋ฌผ์ ์์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ์ต๋๋ค.
Creature ์ถ์ํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public abstract class Creature {
private int x;
private int y;
private int age;
public Creature(int x, int y, int age) {
this.age = age;
this.x = x;
this.y = y;
}
public void age() {
age++;
}
public void move(int xDistance) {
x += xDistance;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public abstract void attack();
public abstract void printInfo();
@Override
public String toString() {
return "x : " + x + ", y : " + y + ", age : " + age;
}
}
|
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ช ์ฒด๊ฐ ๊ฐ๋ ์์๋ก ์์น x, y๊ทธ๋ฆฌ๊ณ age ๋์ด๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ์ฌ ์ ์ธํ๊ณ ์์ฑ์๊ฐ ๋ง๋ค์ด ์ง๋ ์ด 3๊ฐ์ง ์์๋ ๋ฐ์์ ๋ฃ์ ์ ์๋๋ก ํ์ต๋๋ค. toString ๋ฉ์๋๋ ๋์ค์ ์ถ๋ ฅ์ ๊ฐํธํ๊ฒ ํ๊ธฐ ์ํด์ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ์ฌ์ฉํ์ต๋๋ค.
1
2
3
4
5
6
7
|
public void age() {
age++;
}
public void move(int xDistance) {
x += xDistance;
}
|
์๋ช ์ฒด๋ผ๋ฉด ๋์ด๋ฅผ ๋จน๊ณ x์ขํ์์ผ๋ก ์ด๋ ํ ์ ์๋ ๋ถ๋ถ์ด ๊ณตํต ์ ์ธ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ํ์ ํด๋์ค์์ ์์ํ ์ ์๋๋ก ์ผ๋ฐ ๋ฉ์๋๋ก ๊ตฌํํ์ต๋๋ค.
1
2
|
public abstract void attack();
public abstract void printInfo();
|
์ถ์๋ฉ์๋๋ก๋ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฅ๊ณผ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ ์ ์ธํ์ต๋๋ค. ๋ชจ๋ ์๋ช ์ฒด์ ํ์ํ ๊ธฐ๋ฅ์ด์ง๋ง ๊ฐ๊ฐ ์๋ช ์ฒด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌํ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ ๋ ๋ฉ์๋๋ ์ถ์๋ฉ์๋๋ก ์ ์ธํ์ฌ ํ์ํด๋์ค์์ ์ฒ๋ฆฌํ๋๋ก ํ ๊ฒ์ ๋๋ค.
Animal ์ถ์ํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
|
public abstract class Animal extends Creature{
public Animal(int x, int y, int age) {
super(x, y, age);
}
@Override
public void attack() {
System.out.println("๋ชธ์ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ!!");
}
}
|
๋๋ฌผ ํด๋์๋ ์๋ช ์ฒด์ด๊ธฐ ๋๋ฌธ์ Creature ์ถ์ํด๋์ค๋ฅผ ์์ํ์ต๋๋ค. ๋๋ฌผ์ ๋ชธ์ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฝํ๊ธฐ ๋๋ฌธ์ ์ถ์๋ฉ์๋ ์ค์ attack๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์์ต๋๋ค. ์ง๊ธ๊น์ง ์ถ์ํด๋์ค์ ๋ํ ์ดํด๋ฅผ ๋ค ํ์ จ๋ค๋ฉด ์ฝ๋์ ์ด์ํ ๋ถ๋ถ์ด ์งํ๊ฒ๋๋ค. ๋ฐ๋ก printInfo ๋ฉ์๋๋ ์ถ์๋ฉ์๋์ธ๋ฐ ์ ๋๋ฌผ ํด๋์ค์๋ ์๋ ๊ฑธ๊น์?? ์ด ์ด์ ๋ ํ๋ ๋ ๋ด๋ฆฐ ๊ฒ์ ๋๋ค. ์๋ช ์ฒด ํด๋์ค๋ ๋๋ฌผ ํด๋์ค๋ ์ถ์ํด๋์ค์ ๋๋ค. ์ฆ ์์ ํด๋์ค์์ ์ ์ธํ ์ถ์๋ฉ์๋๋ฅผ ์์ผ๋ก ๋๋ฌผ ํด๋์ค๋ฅผ ์์ํ ํด๋์ค์๊ฒ ์์ํ ๊ฒ์ ๋๋ค. ๋๋ฌผ ํด๋์ค๋ ์ถ์ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์์ฒ๋ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ถ์ํด๋์ค๋ ์์์ ์ํ ํด๋์ค์ด๋๊น!!
Human ์ถ์ํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public abstract class Human extends Creature implements Talkable{
public Human(int x, int y, int age) {
super(x, y, age);
}
@Override
public void attack() {
System.out.println("๋๊ตฌ๋ฅผ ์ฌ์ฉ!!");
}
@Override
public void talk() {
System.out.println("์ฌ๋์ ๋ง์ ํ ์ ์๋ค.");
}
}
|
์ธ๊ฐ ํด๋์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก attack ์ถ์๋ฉ์๋๋ ๊ตฌํํด์ฃผ๊ณ , printInfo ์ถ์๋ฉ์๋๋ ์๋๋ก ์์ํ ๊ฒ์ ๋๋ค. ์ธ๊ฐ ํด๋์ค๋ ๋๋ฌผ ํด๋์ค์ ๋ค๋ฅด๊ฒ Talkable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ต๋๋ค. ์์ํ ์ ์๋ฏ์ด Talkable ์ธํฐํ์ด์ค์์๋ talk๋ฉ์๋๊ฐ ์ถ์๋ฉ์๋๋ก ์๊ฒ ์ฃ ? ์ถ์ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ ๊ฒ์ ๋ณด๋ฉด ์ ๋ง ์ผ๋ฐํด๋์ค์ ํฌ๊ฒ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
Talkable ์ธํฐํ์ด์ค
1
2
3
|
public interface Talkable {
abstract void talk();
}
|
Talkable ์ธํฐํ์ด์ค์์๋ ํฌ๊ฒ ๋ค๋ฃฐ ๊ฒ ์์ด ์ถ์๋ฉ์๋๋ฅผ ํ๋๋ง ์ ์ธ ํ์ต๋๋ค. ์ ๊ฐ ์์ฑํ๋ ์ธํฐํ์ด์ค๋ค์ ๋ช ๋ช ๊ท์น์ ๋ณด์๋ฉด ์์๊ฒ ์ง๋ง ~able๋ก ๋๋๋ ์ธํฐํ์ด์ค๋ค์ด ๋ง์ต๋๋ค. ๋ชจ๋ ์ธํฐํ์ด์ค๊ฐ ๋ค ๊ทธ๋ฐ ๊ฒ์ ์๋์ง๋ง "~๋ฅผ ํ ์ ์๋" ํด๋์ค๋ผ๋ ๊ฒ์ ๋ช ์ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ex) Parsable, Comparable...
Flyable ์ธํฐํ์ด์ค
1
2
3
4
|
public interface Flyable {
void fly(int yDistance);
void flyMove(int xDistance, int yDistance);
}
|
๋ค์์ ์ ์ข ๋ฅ์ ๋๋ฌผ ํด๋์ค์ ๊ตฌํ์ํฌ Flyable ์ธํฐํ์ด์ค์ ๋๋ค. ๋ค๋ฅธ ๋๋ฌผ๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ yํ์ผ๋ก ์๋ก ์ฌ๋ผ๊ฐ ์ ์๋๋ก ํ๋ ๋ฉ์๋๋ค์ ์ ์ธํ์ต๋๋ค.
Pigeon ์ผ๋ฐํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class Pigeon extends Animal implements Flyable{
public Pigeon(int x, int y, int age) {
super(x, y, age);
}
@Override
public void fly(int yDistance) {
setY(getY() + yDistance);
}
@Override
public void flyMove(int xDistance, int yDistance) {
setY(getY() + yDistance);
setX(getX() + xDistance);
}
@Override
public void printInfo() {
System.out.println("Pigeon -> " + toString());
}
}
|
๋น๋๊ธฐ ํด๋์ค๋ ์ผ๋ฐ ํด๋์ค์ ๋๋ค. ๋๋ฌผ ํด๋์ค๋ฅผ ์์ํ๊ณ ๋ ์ ์๋ ๋๋ฌผ์ด๊ธฐ์ Flyable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ฃผ๊ณ ํด๋น ๋ฉ์๋๋ค์ ๊ตฌํ ํด ์ฃผ์์ต๋๋ค. printInfo ๋ฉ์๋๋ฅผ ๋ณด์๋ฉด ์ด์ ์ Creatureํด๋์์ ์ถ์๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ์์ฃ ?
Swimable ์ธํฐํ์ด์ค
1
2
3
|
public interface Swimable {
void swimDown(int yDistance);
}
|
Swimable ์ธํฐํ์ด์ค์ ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ ์ฐจ์ด์ ์์ 2. ๊ณตํต๋ ๊ธฐ๋ฅ ์ฌ์ฉ์ฌ๋ถ์ ๊ด๋ จ๋ ์ธํฐํ์ด์ค์ ๋๋ค. ์ ๋ ์์ผ๋ก ๊ฑฐ๋ถ์ด์ ์ผ๋น์ด๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํ ๊ฒ๋๋ค. ๊ฑฐ๋ถ์ด๋ ๋๋ฌผ์ด๊ณ ์ผ๋น์ ์ฌ๋์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ ์๋ช ์ฒด ๋ชจ๋ ์์์ ํ ์ ์์ต๋๋ค. ์ด๋ฐ๊ฒฝ์ฐ ์๋ช ์ฒด ํด๋์ค์๋ค๊ฐ swinDown ์ถ์๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผํ๋? ์๋๋ฉด ๊ฐ๊ฐ ๋๋ฌผ๊ณผ ์ฌ๋ ํด๋์ค์ ์ถ์๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผํ๋? ์... ํ์ง๋ง ๋๋ฌผ์ด๋ ์ฌ๋์ค์์ ์์์ ๋ชปํ๋ ์ฌ๋์ด ์์ ์๋ ์๋ค!? ๋ฐ๋ก ์ด๋ฐ ๊ฒฝ์ฐ์ ์ธํฐํ์ด์ค๋ก ๋ค๋ก ์ ์ธ์ ํด์ค์ ๊ฐ๊ฐ ์์์ ํ ์ ์๋ ํด๋์ค์ ๊ตฌํ์์ผ์ค์ ๋ง๋ค์ด ์ฃผ๋ฉด ๊ฐ๋ ์ฑ๋ ์ข๊ณ ์ ์ง๋ณด์ํ๋ ์ธก๋ฉด์์๋ ๋ฐ์ด๋๊ฒ ์ฃ ??
Turtle ์ผ๋ฐํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Turtle extends Animal implements Swimable{
public Turtle(int x, int y, int age) {
super(x, y, age);
}
@Override
public void swimDown(int yDistance) {
setY(getY() - yDistance);
}
@Override
public void printInfo() {
System.out.println("Turtle -> " + toString());
}
}
|
๊ฑฐ๋ถ์ด ํด๋์ค์์ ์๋๋ก ์์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ฌ์ ์ ํด์ฃผ๊ณ
Kevin ์ผ๋ฐํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Kevin extends Human implements Programmer, Swimable{
public Kevin(int x, int y, int age) {
super(x, y, age);
}
@Override
public void coding() {
System.out.println("Hello World!");
}
@Override
public void swimDown(int yDistance) {
setY(getY() - yDistance);
if(getY() < -10) {
System.out.println("๋๋ฌด ๊น์ด ๋ค์ด๊ฐ๋ฉด ์ฃฝ์์๋ ์์ด!!");
}
}
@Override
public void printInfo() {
System.out.println("Kevin -> " + toString());
}
}
|
Kevinํด๋์ค์์๋ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ์ฌ์ ์ ํด์ค ์ ์๋ค. ์ผ๋น ๊ฐ์ ๊ฒฝ์ฐ๋ y๊ฐ์ด -10์ดํ๋ก ๋ด๋ ค๊ฐ๋ฉด ์ฃฝ์ ์๋ ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ ์ ํ์ต๋๋ค. ๋ฐ๋ก ์ด๋ฐ ๋ถ๋ถ์์๋ ์ถ์ํด๋์ค ๋ง๊ณ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๊ฒ ์ฃ ??
๊ทธ๋ฆฌ๊ณ ๋๋ค๋ฅธ ์ธํฐํ์ด์ค์ ์ฅ์ ! ๋ฐ๋ก ๋ค์ค๊ตฌํ! Kevin์ ์์๋ ํ ์ ์๊ณ ์ฝ๋ฉ๋ ํ ์ ์์ต๋๋ค. ๊ทธ๋์ Programmer์ Swimable ์ธํฐํ์ด์ค๋ฅผ ๋ชจ๋ ๊ตฌํํ๊ณ ํ์ํ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
Programmer ์ธํฐํ์ด์ค
1
2
3
|
public interface Programmer {
void coding();
}
|
Main ์คํํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public class Main {
public static void main(String[] args) {
Pigeon p = new Pigeon(5,10,14);
p.printInfo();
p.age();
p.move(100);
p.printInfo();
p.fly(5);
p.printInfo();
p.flyMove(10, 20);
p.printInfo();
p.attack();
System.out.println();
Kevin kev = new Kevin(0, 0, 35);
kev.printInfo();
kev.age();
kev.move(10);
kev.printInfo();
kev.attack();
kev.coding();
kev.swimDown(20);
kev.printInfo();
kev.talk();
System.out.println();
Turtle tur = new Turtle(100, -10, 95);
tur.printInfo();
tur.age();
tur.move(-100);
tur.printInfo();
tur.attack();
tur.swimDown(1000);
tur.printInfo();
}
}
|
์ค๊ณํ ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ผ๋... ์ด์ ํ์ธ ํด๋ด์ผ๊ฒ ์ฃ ?
์คํ๊ฒฐ๊ณผ
์ ์์์ฒ๋ผ ์ง์ ์ฌ์ฉํด์ ๋ค๋ฅธ ์์๋ฅผ ๋ง๋ค์ด ์ฃผ๋ฉด ์ธํฐํ์ด์ค์ ์ถ์ํด๋์ค์ ์ฐจ์ด์ ๊ณผ ์ํฉ๋ณ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผํ ์ง ๊ฐ์ด ์ฌ๊ฒ ๊ฐ์์. ์ ๋ ๋๋ฆ๋๋ก ๊ณต๋ถํ๊ณ ์ค์ต์ ํตํด ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ํ ์ ๋ฆฌ๋ฅผ ํด๋ดค๋๋ฐ ๋ง๊ณ ํ๋ฆฐ ๋ถ๋ถ๋ค๋ ๋ถ๋ช ์กด์ฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๊ฐํฉ๋๋ค. ์ ์ ๋ฐ ์ ๋ด์ฉ์ ์ถ๊ฐํ๊ณ ์ถ์ ๊ฒ์ด ์๋ค๋ฉด ๋๊ธ ๊ผญ ๋จ๊ฒจ์ฃผ์ธ์!!
์ ๋ฆฌ
์ถ์ํด๋์ค ์ฌ์ฉ ์๊ธฐ : ์์ ๊ด๊ณ๋ฅผ ์ญ ํ๊ณ ์ฌ๋ผ๊ฐ์๋ ๊ฐ์ ์กฐ์ํด๋์ค๋ฅผ ์์ํ๋๋ฐ ๊ธฐ๋ฅ๊น์ง ์๋ณํ ๋๊ฐ์ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ
(ex. attack, printInfo)
์ธํฐํ์ด์ค ์ฌ์ฉ ์๊ธฐ : ์์ ๊ด๊ณ๋ฅผ ์ญ ํ๊ณ ์ฌ๋ผ๊ฐ์๋ ๋ค๋ฅธ ์กฐ์ํด๋์ค๋ฅผ ์์ํ๋๋ฐ ๊ฐ์ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค ์ฌ์ฉ
(ex. Swimable)
๋๊ธ