본문 바로가기

공부기록/객체지향

12장. 다형성

상속은 타입 계층을 구조화하기 위해 사용해야 한다.

클라이언트 관점에서 인스턴스들을 동일하게 행동하는 그룹으로 묶어야 한다.

다형성

유니버셜 다형성 - 매개변수 다형성, 포함 다형성

임시 다형성 - 오버로딩 다형성, 강제 다형성

하나의 클래스안에 동일한 이름의 메서드가 존재하는 경우 - 오버로딩 다형성

강제 다형성 - + : 숫자면 덧셈, 문자열이 있으면 concat

매개변수 다형성 - 제네릭 프로그래밍

포함 다형성 - 수신한 객체의 타입에 따라 실제로 수행하는 행동이 달라지는 능력 - 일반적으로 객체지향에서 다형성이라 불리는 것

코드 재사용이 아닌 서브타입의 구현 - is-a

⇒ 포함 다형성에 대해 다룸

상속의 양면성

  • 업캐스팅
  • 동적 메서드 탐색
  • 동적 바인딩
  • self 참조
  • super 참조

부모 클래스 타입으로 선언된 변수에 자식 클래스의 인스턴스를 할당하는 것이 가능하다. 이를 업캐스팅이라고 부른다.

선언된 변수 타입이 아니라 메시지를 수신하는 객체의 타입에 따라 실행되는 메서드가 결정된다. 실행 시점에 결정하기 때문에 가능. 이를 동적 바인딩.

self → 해당 객체의 다른 함수. 멤버변수 호출

수신한 메시지를 다른 객체에게 동일하게 전달해서 처리를 요청하는 것을 위임이라고 부른다.

클래스가 존재하지 않고, 오직 객체만 존재하는 프로토타입 기반의 객체지향 언어에서 상속을 구현하는 유일한 방법은 객체 사이의 위임을 이용하는 것

위임으로도 다형성을 구현할 수 있다.