코딩하는 털보

OOP - 29 본문

IT Study/JAVA OOP

OOP - 29

이정인 2020. 12. 18. 19:38

객체 지향 프로그래밍

28. 다형성

  • 다형성 이란
    하나의 코드가 여러 자료형으로 구현되어 실행되는 것
    같은 코드에서 여러 실행 결과가 나옴

정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나이다.
OOP의 유연성, 재활용성, 유지보수성에 기본이 되는 특징이다.

  • 다형성의 장점
    유사한 클래스가 추가되는 경우의 유지보수에 용이하고
    각 자료형 마다 다른 메서드를 호출하지 않으므로 코드에서 많은 if문이 사라진다.
package polymorphism;

import java.util.ArrayList;

class Animal {

    public void move() {
        System.out.println("동물이 움직입니다.");
    }
}

class Human extends Animal {

    @Override
    public void move() {
        System.out.println("사람이 두 발로 걷습니다.");
    }
}

class Tiger extends Animal {

    @Override
    public void move() {
        System.out.println("호랑이가 네 발로 뜁니다.");
    }
}

class Eagle extends Animal {

    @Override
    public void move() {
        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(); //하나의 코드에서 여러 자료형을 구현하여 여러 결과가 나옴. (다형성)
                       //매개변수는 Animal이지만 실제 호된 move는 Human, Tiger, Eagle의 메서드. (업캐스팅,오버라이딩)
                       //여러 클래스가 Animal이라는 타입 하나로 수행될 수 있음.
    }

}
Comments