본문 바로가기

Java/객체지향 설계

객체지향 특징 - 다형성

다형성이란 어떤 것이 다른 형태로 발생하는 상황을 설명한다.

동일한 인터페이스로 서로 다른 유형의 객체에 접근 할 수 있는 개념을 설명한다.

 

 

다형성 종류

 

  • 정적 또는 컴파일 다형성
  • 동적 다형성

 

정적 다형성

 

Java 를 사용하면 동일한 이름을 사용하지만 매개 변수가 다른

메서드를 여러개 구현할수있다.

이걸 메서드 오버로딩이라 하고 정적 형태의 다형성을 나타낸다.

 

동적 다형성

 

동적 다형성은 컴파일러가 실행 된 메서드를 결정 짓게 하지 않는다.

JVM 런타임에 결정이 된다.

 

하위 클래스는 상위 클래스의 메소드를 오버라이딩 할 수 있는데

동일한 이름과 매개변수를 공유하지만 다른 기능을 제공 할 수 있다.

이게 다형성의 한 형태라 볼 수 있다.

 

 

late binding

 

하위 클래스가 상위클래스 타입으로 생성된 경우를 봐보자

 

컴파일러는 코드를 보고 BasicCoffeeMachine 에 있는 메소드만 사용할 수 있게 한다.

근데 Premium 클래스 내부에서 brewCoffee 를 오버라이드 한 상태 인 경우에

coffeeMachine 이 brewCoffee 를 호출하면 Premium 에서

오버라이드 된 메소드를 JVM 이 실행한다.

 

요약

 

동일한 인터페이스에서 서로 다른 클래스를 사용할 수 있다는 개념을 설명한다.

 

두가지 종류의 다형성이 있고

정적 다형성은 메서드를 오버로드 한 경우라 할 수 있고,

동적 다형성은 서브 클래스를 슈퍼 클래스로 캐스트 하더라도 

항상 서브 클래스의 오버라이드된 메소드를 호출하는 걸 뜻한다.