2023.09.15 FRI
436p ~ 446p
33일차 내용 ⬇️
2023.09.15 - [개발 서적 기록/오브젝트_조영호] - 33일차 - 포워딩과 위임 그리고 자바스크립트의 상속
33일차 - 포워딩과 위임 그리고 자바스크립트의 상속
2023.09.14 THU 425p ~ 435p 32일차 기록 ⬇️ 2023.09.14 - [개발 서적 기록/오브젝트_조영호] - 32일차 - self 참조와 super 참조 32일차 - self 참조와 super 참조 2023.09.14 THU 415p ~ 424p 31일차 내용 ⬇️ 2023.09.11 - [개
magenta-ming.tistory.com
상속의 용도
1. 타입 계층 구현
타입 계층 관점에서 부모 클래스는 자식 클래스의 일반화 generalization 이고 자식 클래스는 부모 클래스의 특수화 specialization 다.
2. 코드 재사용
상속을 통해 부모 클래스의 코드를 재사용할 수 있지만, 부모 클래스와 자식 클래스가 강하게 결합되기 때문에 코드가 변경하기 어려워질 수 있다.
따라서, 상속은 타입 계층 구현을 우선해야한다.
타입 계층을 목표로 상속을 사용하면, 다형적으로 동작하는 객체들의 관계에 기반해 확장 가능하고 유연한 설계를 얻을 수 있다.
타입
타입 계층을 구현할 때는 객체의 행동을 기반으로 타입 계층을 구성해야한다.
동일한 메시지에 대해 서로 다르게 행동할 수 있는 다형적인 객체를 구현하기 위해서다.
개념 관점의 타입
우리가 인지하는 세상의 사물의 종류다.
개념 관점의 타입은 3가지로 구성된다.
1. 심볼 symbol : 프로그래밍 언어
2. 내연 intension : 타입에 속하는 객체들이 가지는 공통적인 속성이나 행동
3. 외연 extension : 타입에 속하는 객체들의 집합
프로그래밍 언어 관점의 타입
비트 묶음에 의미를 부여하기 위해 정의된 제약과 규칙이다.
프로그래밍 언어 관점의 타입은 두가지 목적을 가지고 있다.
1. 유효한 오퍼레이션의 집합
2. 타입에 수행되는 오퍼레이션에 대해 미리 약속된 문맥 제공
객체지향 패러다임 관점의 타입
객체의 퍼블릭 인터페이스가 객체의 타입을 결정한다.
동일한 퍼블릭 인터페이스를 제공하는 객체들은 동일한 타입으로 분류된다.
상속을 사용할 수 있는 조건
상속은 타입 계층을 구현하는 것이 바른 용도 이기에 아래 두가지 조건을 모두 만족해야한다.
1. 상속 관계가 is-a 관계를 모델링하는가?
일반적으로 자식 클래스는 부모클래스다 라고 말해도 이상하지 않다면 이 조건에 만족한다고 할 수 있다.
2. 클라이언트 입장에서 부모 클래스의 타입으로 자식 클래스를 사용해도 무방한가?
자식 클래스와 부모 클래스 사이에 행동 호환성이 보장되는지에 대한 조건이다.
is-a 관계
어떤 타입 S가 다른 타입 T의 일종이라면, 타입 S는 타입 T다 ( S is-a T ) 라고 말할 수 있다.
is-a 관계은 기대되는 행동에 따라서 타입 계층이 구성된다는 것을 알 수 있다.
즉 타입 계층의 의미는 행동이라는 문맥에 따라 달라진다.
행동 호환성
두 타입 사이에 행동이 호환될 경우에만 타입 계층으로 묶어야한다.
이때, 단순히 동일한 메서드를 구현한다고 행동이 호환되는 것은 아니다.
클라이언트의 관점에서 두 타입이 동일하게 행동할 것이라고 기대해야한다.
'개발 서적 기록 > 오브젝트_조영호' 카테고리의 다른 글
36, 37일차 - 계약에 의한 설계 (0) | 2023.09.18 |
---|---|
35일차 - 상속의 목적 : 서브클래싱 & 서브타이핑 그리고 ISP & LSP (0) | 2023.09.15 |
33일차 - 포워딩과 위임 그리고 자바스크립트의 상속 (0) | 2023.09.15 |
32일차 - self 참조와 super 참조 (0) | 2023.09.14 |
31일차 - 업캐스팅 & 동적 바인딩 그리고 동적 메서드 탐색 (0) | 2023.09.11 |