자바 객체지향 - 다형성
Written by 태인 on
객체지향 프로그래밍의 특성 중 “다형성(Polymophism)”이라는 것이 있다.
간단한 개념은
하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것이다.
예제로 알아보자.
public class Bouncer {
public void barkAnimal(Animal animal) { //instanceof란 형변환 가능 여부 연산자
if (animal instanceof Tiger) {
System.out.println("어흥");
} else if (animal instanceof Lion) {
System.out.println("으르렁");
}
}
public static void main(String[] args) {
Tiger tiger = new Tiger();
Lion lion = new Lion();
Bouncer bouncer= new Bouncer();
bouncer.barkAnimal(tiger);
bouncer.barkAnimal(lion);
}
}
그러나 더 많은 동물들이 추가되면 if조건을 계속 추가해야 한다. 좀 더 나은 방법을 찾아보자.
Barkable.java를 생성해보자.
public interface Barkable {
public void bark();
}
Tiger.java
public class Tiger extends Animal implements Predator, Barkable {
public String getFood() {
return "apple";
}
public void bark() {
System.out.println("어흥");
}
}
Tiger도 마찬가지로 bark메소드에 ‘으르렁’을 출력하도록.
그 다음 맨 위에 만들었던 bouncer클래스를 수정해보자.
public class Bouncer {
public void barkAnimal(Barkable animal) {
animal.bark();
}
public static void main(String[] args) {
Tiger tiger = new Tiger();
Lion lion = new Lion();
Bouncer bouncer= new Bouncer();
bouncer.barkAnimal(tiger);
bouncer.barkAnimal(lion);
}
}
클래스를 수정하고 Bouncer 클래스를 실행하더라도 역시 다음과 같이 동일한 결과값이 출력되는 것을 확인 할 수 있다.
어흥
으르렁
위 예제에서 사용한 tiger, lion 객체는 각각 Tiger, Lion 클래스의 객체이면서 Animal 클래스의 객체이기도 하고 Barkable, Predator 인터페이스의 객체이기도 하다. 이러한 이유로 barkAnimal 메소드의 입력 자료형을 Animal에서 Barkable 로 바꾸어 사용할 수 있는 것이다. 이렇게 하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것을 객체지향 세계에서는 다형성, 폴리모피즘(Polymorphism)이라고 부른다.
댓글