자바 객체지향 - 다형성

자바 객체지향 - 다형성

작성자
태인태인
카테고리
📗 스터디
작성일
2020년 02월 23일
태그
Java
객체지향 프로그래밍의 특성 중 "다형성(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)이라고 부른다.

댓글

guest