상속의 목적은 코드 재사용이 아니다.
상속의 목적은 타입 계층을 구조화하기 위함이다.
클라이언트 관점에서 인스턴스들을 동일하게 행동하는 그룹으로 묶기 위해서이다.
상속의 목적은 (서브타입) 다형성을 위한 서브타입 계층을 구축하는 것이다.
객체 지향 패러다임은 데이터와 행동을 하나의 실행 단위로 본다. 이런 측면에서 보면 상속은 데이터와 행동을 서브 타입에게 물려주는 것이고 이것이 상속의 목적을 오해하게 한다.
행동 관점에서 상속과 다형성의 기본적인 개념을 이해하기 위해서는 상속 관계로 연결된 클래스 사이의 메서드 탐색 과정을 이해하는 것이 가장 중요하다.
업캐스팅 : 부모 타입으로 선언된 변수에 자식 클래스의 인스턴스를 할당하는 것
동적 바인딩 : 메시지 처리를 실행 시점에 결정
위의 두 메커니즘은 OCP를 가능하게 해준다.
OOP 시스템이 메서드 선택을 하는 과정은 다음과 같다.
- 우선 자신을 생성한 클래스에 적합한 메서드가 존재하는지 검사
- 부모 클래스에서 메서드 탐색. 상속 계층을 따라 올라가며 계속됨
- 없다면 예외 발생
self 참조 : 스스로의 클래스를 가리키는 참조값. java에선 this이다.
메서드의 식별 기준은 시그니처이다.
메서드 오버라이딩은 자식 클래스의 메서드가 동일한 시그니처를 가진 부모 클래스의 메서드보다 먼저 탐색되기 때문에 벌어지는 현상이다.
상속을 이용할 경우 메시지 위임과 관련된 코드를 명시적으로 작성할 필요가 없다.
'CS > OOP' 카테고리의 다른 글
[오브젝트] 11장 - 합성과 유연한 설계 (0) | 2024.02.15 |
---|---|
[오브젝트] 10장 : 상속의 문제점과 추상화 (1) | 2024.02.05 |
[오브젝트] 9장 : 유연한 설계를 하려면 OCP, DIP를 지켜라 (0) | 2024.02.01 |
[오브젝트] 8장 - 좋은 의존성과 나쁜 의존성 (0) | 2024.01.29 |
[오브젝트] 7장 : 기능 분해의 측면에서 본 OOP (1) | 2024.01.23 |