다형성(Polymorphism)

uglyduck.dev·2020년 9월 20일
0

개념 모아 🗂

목록 보기
22/40

정의

서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력

  • 일반화 관계와 함께 자식 클래스를 개별적으로 다룰 필요 없이 한 번에 처리할 수 있게 하는 수단을 제공한다.

  • 상속과 연계되어 동작하면 매우 강력한 힘을 발휘한다.

구현 예시

다형성을 사용하지 않을 경우 (클래스별로 다르게 처리해줘야 함)

class Dog{
  public void bark() {...}
}

class Cat{
  public void meow() {...}
}

class Parrot{
  public void sing() {...}
}

public class Main{
  public static void main(String[] args){
    Dog d = new Dog();
    Cat c = new Cat();
    Parrot p = new Parrot();
    b.bark();
    c.meow();
    p.sing();
  }
}

다형성을 사용 할 경우 (구체적으로 현재 어떤 클래스 객체가 참조되는지와 무관하게 프로그래밍 할 수 있음.)

abstract class Pet{
  public abstract void talk();
}

class Dog extends Pet{
  public void talk(){...}
}

class Cat extends Pet{
  public void talk(){...}
}

class Parrot extends Pet{
  public void talk(){...}
}

public class Main {
  public static void groupTalk(Pet[] p) {
    int i;
    
    for(i = 0; i < 3; i++) 
      p.talk();
  }
  public static void main(String[] args) {
    Pet[] p = { new Cat(), new Dog(), new Parrot() };
    groupTalk(p);
  }
}
  • 일반화 관계에 있을 때 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있다.

  • 부모 클래스의 참조 변수가 접근할 수 있는 것은 부모 클래스가 물려준 변수와 메서드뿐이다.

Reference

  • 정인상, 채흥석, 『JAVA 객체 지향 디자인 패턴』, 한빛미디어(2019.3.8), 81~84p
profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글