[Java] 다형성(polymorphism)

HyunDong Lee·2022년 8월 22일
0

Java

목록 보기
4/4

다형성

유연하고 쉽게 변경이 용이한 자바의 특성을 뒷받침하는 속성이다. 다형성은 부모 클래스가 자식 클래스의 동작 방식을 알 수 없어도 오버라이딩을 통해 자식 클래스에 접근을 가능 하게 한다. 이를 통해 자바는 객체 지향형 언어가 될 수 있는 것이다.

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작해야함.
  • 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.

그렇다면 다형성이 어떻게 해서 가능한 것인가?

자바 언어는 동적으로 바인딩하기 때문에 메서드 실행 즉 run time 에 바인딩이 된다. 그러므로 메서드가 실행되는 시점에 부모 메서드의 성격을 결정하는 것임.


다형성의 실세계 비유

  • 운전자 - 자동차
  • input/output 인터페이스들

다형성의 조건

  • 상속 관계

    • 부모와 자식 간의 클래스 상속이 이루어져야 한다.
  • 오버라이딩

    • 자식 클래스에서 메소드를 재정의해야 한다.
  • 업캐스팅

    • 자식 클래스 객체를 부모 클래스 타입으로 형변환할 수 있어야 한다.

상속 관계

부모 자식 클래간 상속이 이뤄져야한다.

class Animal{
	public String name;
    public String breed;
    Animal(String name, String breed){
    	this.name = name;
        this.breed = breed;
    }
    
    void cry(){
    	System.out.println("울음소리 :( )");
    };
}

class Cat extends Animal{}

class Dog extends Animal{}

오바라이딩

자식 클래스에서 메소드 재정의

class Cat extends Animal{
	public String name;
    public String breed;
    
    Cat(String name, String breed){
    	this.name = name;
        this.breed = breed;
    }
    
    @Override
    void cry(){
    	System.out.println("Meow ~");
    }
}

class Dog extends Animal{
	public String name;
    public String breed;
    
    Dog(String name, String breed){
    	this.name = name;
        this.breed = breed;
    }
    
    @Override
    void cry(){
    	System.out.println("Grr ~");
    }
}

업캐스팅

자식 클래스 객체를 부모 클래스로 형변환

Animal a1 = new Dog("Phil", "Dog")

0개의 댓글