본문 바로가기

프로그래밍/Java

19.12.24) Java - message polymorphism(다형성)

목차

  • message polymorphism(다형성)이란?
  • 다형성 이론의 전제 조건
  • 다형성 이론의 활용 방법 2가지

핵심

  • 다형성은 부모 클래스를 적절하게 이용하는 것이다.

Message polymorphism(다형성)이란?

다형성이란 상속 관계에 있는 클래스에서 부모 클래스가 동일한 메세지로 자식 클래스들을 서로 다르게 동작시키는 원리이다. 같은 메서드를 호출해도 출력되는 결과 값이 달라진다. 객체지향의 핵심이다.

예를 들어, 부모가 3명의 자식에게 꽃을 사오라고 말하면 3명의 자식은 각자 자신의 방법으로 꽃을 사올 것이다. 첫 째는 꽃 배달 업체를 이용한다. 둘 째는 직접 산다. 셋 째는 친구에게 부탁한다. 이처럼 꽃 사오라는 동일한 메세지지만 자식마다 동작이 다르다.

다형성 이론의 전제 조건

  1. 상속 관계가 되어야 한다.
  2. 객체 생성을 upCasting으로 해야 한다.
  3. 자식 클래스에서 override가 되어야 한다.

다형성 이론의 활용 방법 2가지

1. 다형성 인수(데이터 이동)

메서드 선언부에서 매개변수 타입을 부모 객체로 해놓으면 서로 다른 자식 객체가 매개변수로 들어와도 함수가 작동된다.

Dog d = new Dog();
display(d); // 왈왈

Cat c = new Cat();
display(c); // 야옹

public static void display(Animal r) {
    r.eat();
}

2. 다형성 배열(서로 다른 객체를 담을 수 있다)

배열은 같은 자료형인 데이터들만 담을 수 있다. 하지만 다형성 이론을 이용하면 배열에도 서로 다른 자료형(객체)를 담을 수 있다. 상속 관계에서는 자식 객체를 부모 객체로 자유롭게 형 변환할 수 있기 때문이다. 그래서 부모 객체 배열을 만들고 각 element에 서로 다른 자식 객체를 담으면 된다.

Animal[] r = new Animal[2]; // Animal 객체만 담을 수 있는 배열
r[0] = new Dog(); // Animal 변수에 Dog 객체를 담는 것, upCasting
r[1] = new Cat();

r[0].eat();
r[1].eat();