다형성이란 어떤 것이 다른 형태로 발생하는 상황을 설명한다.
동일한 인터페이스로 서로 다른 유형의 객체에 접근 할 수 있는 개념을 설명한다.
다형성 종류
- 정적 또는 컴파일 다형성
- 동적 다형성
정적 다형성
Java 를 사용하면 동일한 이름을 사용하지만 매개 변수가 다른
메서드를 여러개 구현할수있다.
이걸 메서드 오버로딩이라 하고 정적 형태의 다형성을 나타낸다.
동적 다형성
동적 다형성은 컴파일러가 실행 된 메서드를 결정 짓게 하지 않는다.
JVM 런타임에 결정이 된다.
하위 클래스는 상위 클래스의 메소드를 오버라이딩 할 수 있는데
동일한 이름과 매개변수를 공유하지만 다른 기능을 제공 할 수 있다.
이게 다형성의 한 형태라 볼 수 있다.
late binding
하위 클래스가 상위클래스 타입으로 생성된 경우를 봐보자
컴파일러는 코드를 보고 BasicCoffeeMachine 에 있는 메소드만 사용할 수 있게 한다.
근데 Premium 클래스 내부에서 brewCoffee 를 오버라이드 한 상태 인 경우에
coffeeMachine 이 brewCoffee 를 호출하면 Premium 에서
오버라이드 된 메소드를 JVM 이 실행한다.
요약
동일한 인터페이스에서 서로 다른 클래스를 사용할 수 있다는 개념을 설명한다.
두가지 종류의 다형성이 있고
정적 다형성은 메서드를 오버로드 한 경우라 할 수 있고,
동적 다형성은 서브 클래스를 슈퍼 클래스로 캐스트 하더라도
항상 서브 클래스의 오버라이드된 메소드를 호출하는 걸 뜻한다.
'Java > 객체지향 설계' 카테고리의 다른 글
객체지향 설계 - 개방 폐쇄 원칙 (0) | 2021.03.05 |
---|---|
객체지향 설계 - 단일 책임 원칙 (0) | 2021.03.05 |
객체지향 특징 - 상속 (0) | 2021.03.05 |
객체지향 특징 - 캡슐화 (0) | 2021.03.05 |
객체지향의 특징 - 추상화 (0) | 2021.03.03 |