다형성(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

 

결과 :

사람이 두 발로 걷습니다.

호랑이가 네 발로 뜁니다.

독수리가 하늘을 날아다닙니다.

사람이 두 발로 걷습니다.

호랑이가 네 발로 뜁니다.

독수리가 하늘을 날아다닙니다.

 

 

다형성을 사용하는 이유

- 상속과 메서드 재정의를 활용하여 확장성있는 프로그램을 만들 수 있음

- 코드의 유지보수가 편리해짐

- 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현

- 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링할 수 있음

+ Recent posts