YUYANE

Java/ 다형성(polymorphism) 본문

Programming Languages/JAVA

Java/ 다형성(polymorphism)

YUYA 2020. 12. 22. 22:45

다형성(polymorphism)

1. 의미

 

poly : 많은, 다양항

morph : (모습이나 형태가) 변하다

 

=> 즉, 다형성이란 어떤 개체다양한 형태로 변할 수 있는 능력

  - 어떤 개체 : 부모 클래스형의 변수로 참조 중인 개체

  - 다양한 형태 : 실제 개체에 구현된 메서드

Animal animal = new Dog();
animal.shout();
// 실제 개체 자료형인 Dog 클래스에 있는 shout()메서드가 호출된다.

 

2. 특징

 

 1) 상속은 다형성에 필요한 선수 조건

   - 단, 상속 없이 다형성을 지원하는 비주류 OO언어도 있음

 2) 많은 사람들이 OOP의 핵심이라 여기는 특징

 3) 같은 지시를 내렸는데 다른 종류의 개체가 동작을 달리하는 것

 4) 어떤 함수 구현이 실행될지는 프로그램 실행 중에 결정됨

   - 늦은 바인딩(late binding) / 동적 바인딩 (dynamic binding) 이라고 함

   - 일반적인 함수 호출은 이른 바인딩(early binding, 컴파일 중에 결정됨)

 

3. 상속

   

 1) 다형성의 혜택을 받으려면 상속 관계가 필요

  - 부모 개체에서 함수 시그니처를 선언 (final을 붙이면 자식 클래스에서 오버라이딩 안 됨->이른 바인딩 가능)

  - 자식 개채에서 그 함수를 다르게 구현(overriding, 선택사항임)

  (- 다형적으로 동작하는 메서드를 가상 메서드(virtual method)라고 한다.

 

 2) 실용적인 용도 : 다른 종류의 개체를 편하게 저장 및 처리 가능

   - 부모의 타입을 저장하는 배열에 모든 자식 개체를 저장

   - for문 하나로 모든 개체를 순회하며 동일 함수 호출

 

 3) 참고

   - 부모의 동작도 유지하면서 오버라이딩 가능

public class Animal {
	public void shout() {
    	System.out.println("나, 동물이다~");
    }
}


puclic class Sloth extends Animal {
	public void shout() {
    	System.out.println("날 내버려 둬~");
        
        super.shout();
    }
}

Animal animal = new Sloth();
animal.shout();
// 날 내버려 둬~
// 나, 동물이다~

 

4. 장점

 

 1) 각 자료형의 코드가 클래스 안에 들어가니 캡슐화 높아짐

 2) 유지 보수성도 높아짐

 3) 새로운 클래스를 추가할 때 클래스 코드만 추가하면 됨

 

 

** 이른 바인딩 vs 늦은 바인딩 : 성능편

 

 둘 중에 cpu 최적화가 더 잘 될 가능성이 높은 것은 이른 바인딩이다

 - 컴파일러가 실제로 어떤 함수를 호출해야 하는지 앎

 - 따라서 컴파일 중에 충분한 시간을 들여 최적화를 할 수 있음

 - 실행 중에 이렇게 충분한 시간을 사용할 수 없음

 

 

'Programming Languages > JAVA' 카테고리의 다른 글

Java/ Object 클래스와 메서드(toString(), equals(),hashCode())  (0) 2020.12.23
Java/ final  (0) 2020.12.22
Java/ 상속 vs 컴포지션  (0) 2020.12.16
Java/ 재사용성  (0) 2020.12.16
Java / 중복되는 상태는 지우자  (0) 2020.12.15
Comments