Message Polymorphism 다형성
상속 관계에 있는 클래스에서 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체지향 원리(개념)
-
다형성 이론의 전제 조건(부모 클래스를 잘 활용)
- 상속 관계가 되어야 한다.
- 객체 생성을 upcasting으로 할 것(상위 클래스가 하위 클래스에게 메시지를 보내야 함, upcasting이 되면 downcasting을 할 수 있다)
- 하위 클래스가 반드시 재정의(override)해야 한다. (다형성 보장)
- 동적 바인딩을 통해 실현된다. (실행시점에서 사용될 메소드가 결정됨)
-
다형성 활용 방법
- 다형성 인수(데이터 이동)
- 다형성 배열(서로 다른 객체를 담을 수 있음)
instanceof 로 객체 타입을 확인
추상클래스 활용 (일부 다형성 보장)
추상메소드 - 구현부가 없다. (불완전한 메소드)
추상클래스는 추상메소드뿐만 아니라 구현메소드도 가질 수 있다.
추상클래스는 객체 생성할 수 없다. (upcasting으로 활용)
추상클래스인 부모를 상속하면 자식은 추상메소드를 필수적으로 override 해야 한다.
서로 기능이 비슷한 클래스들을 묶을 때 -> 추상클래스
서로 기능이 다른 클래스 -> 인터페이스
인터페이스 활용 (100% 다형성 보장)
100% 추상 메소드만 가능 - 구현된 메소드를 가질 수 없다.
하위 클래스의 동작 방식을 몰라도 인터페이스를 100% 동작 시킬 수 있다.
단독적으로 객체 생성은 불가능하다.
추상메소드에 abstract 키워드를 붙이지 않아도 된다.
상수 사용 가능 - static final (생략 가능)
추상클래스와 인터페이스 (다형성을 보장하기 위함)
-
abstract class
- 서로 기능이 비슷한 클래스의 공통 부분을 묶을 때 사용
- 구현 메소드와 추상 메소드를 함께 가질 수 있다
- 50% 디자인(설계), 50% 구현
-
interface
- 서로 기능이 다른 클래스의 공통 부분을 묶을 때 사용
- 100% 추상 메소드로 이루어진다
- 100% 디자인(설계) 규약
- 구현 메소드를 가질 수 없다
- 다중 상속 형태를 지원한다
- final static 멤버변수를 가질 수 있다
-
공통점
- 다형성을 보장하기 위해서 등장
- 객체를 생성할 수 없다
- 하위 클래스에 의해 구현되어야 한다 (override 필수)
- upcasting으로 객체를 생성
- 추상 메소드를 가진다