다형성(polymorphism)이란?
- 하나의 코드가 여러 자료형으로 수현되어 실행되는 것
- 같은 코드에서 여러 다른 실행결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
- 다형성을 잘 활용하면 유연하고 확장성있고 유지보수가 편리한 프로그램을 만들 수 있음
ex)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
class Animal {
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Human extends Animal {
@Override
public void move() {
System.out.println("사람이 두 발로 걷습니다.");
}
public void readBook() {
System.out.println("사람이 책을 읽습니다.");
}
}
class Tiger extends Animal {
@Override
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
public void hunting() {
System.out.println("호랑이가 사냥을 합니다.");
}
}
class Eagle extends Animal {
@Override
public void move() {
System.out.println("독수리가 하늘을 날아다닙니다.");
}
public void flying() {
System.out.println("독수리가 양 날개를 쭉 펴고 날아다닙니다.");
}
}
public class AnimalTest {
public static void main(String[] args) {
Animal hAnimal = new Human();
Animal tAnimal = new Tiger();
Animal eAnimal = new Eagle();
AnimalTest test = new AnimalTest();
test.moveAnimal(hAnimal);
test.moveAnimal(tAnimal);
test.moveAnimal(eAnimal);
ArrayList<Animal> animalList = new ArrayList<Animal>();
animalList.add(hAnimal);
animalList.add(tAnimal);
animalList.add(eAnimal);
for(Animal animal : animalList) {
animal.move();
}
}
public void moveAnimal(Animal animal) {
animal.move();
}
}
|
cs |
결과 :
사람이 두 발로 걷습니다.
호랑이가 네 발로 뜁니다.
독수리가 하늘을 날아다닙니다.
사람이 두 발로 걷습니다.
호랑이가 네 발로 뜁니다.
독수리가 하늘을 날아다닙니다.
다형성을 사용하는 이유
- 상속과 메서드 재정의를 활용하여 확장성있는 프로그램을 만들 수 있음
- 코드의 유지보수가 편리해짐
- 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현
- 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링할 수 있음
'Java' 카테고리의 다른 글
[Java기본] 상속3-매서드 재정의(overriding), 가상 매서드(virtual method) (0) | 2021.05.03 |
---|---|
[Java기본] 상속2-클래스 생성 과정과 형 변환 (0) | 2021.04.29 |
[Java기본] 상속1 - 문법과 사용예제 (0) | 2021.04.29 |
[Java기본] ArrayList-객체배열 (0) | 2021.04.28 |
[Java기본] Array - 배열에 대하여 (0) | 2021.04.27 |