일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 읽기
- realclass
- 파비최
- 사이드
- 운동
- Daily Challenge
- 잡생각
- Problem Solving
- Writing
- 10분
- 30분
- 만화도
- FIT XR
- leetcode
- 프로젝트
- 리얼 클래스
- 쓰릴오브파이트
- 월간
- 매일
- 화상영어
- 링피트
- 개발자
- 미드시청
- 3줄정리
- English
- 영어원서읽기
- 스탭퍼
- 뭐든
- 괜찮음
- 영어공부
- Today
- Total
파비의 매일매일 공부기록
프로그래머를 위한 파이썬 - 8장 #2 본문
8.2 프로그래밍의 상속
- 상속은 나쁜 평판을 얻어왔다. 복잡한 계층구조로 인한 고통 때문.
8.2.1 실제로 상속은 어디에 쓰이는 것인가?
- 상속은 동작의 특화를 위한 것.
- 코드를 재사용하기 위해서만 서브클래스로 만드는 것은 피해야 함. 다른 값을 반환하거나 다른 작업을 하기 위한 서브클래스를 만들 것.
- 서브클래스는 슈퍼클래스의 특별한 경우처럼 취급되어야 함.
- 서브클래스는 슈퍼클래스의 코드를 재사용하지만, 서브클래스의 인스턴스는 슈퍼클래스의 인스턴스라는 개념이 자연스러운 결과를 만듦.
- 동작을 특화하기 위해 상속을 사용하는 것은 첫 단계임.
8.2.2 치환 가능성
- 프로그램에서 클래스의 모든 인스턴스는 프로그램의 정확성에 영향을 미치지 않으면서 서브클래스 중 하나의 인스턴스로 대체 가능해야 함.
- 콘텍스트의 정확성은 프로그램에 오류가 없으며, 정확한 결과는 각각 다르거나 다른 방식으로 달성되겠지만, 동일한 기본 결과를 달성한다는 것을 의미.
- 치환 가능성은 슈퍼클래스의 인터페이스를 엄격하게 준수하는 서브클래스에서 발생.
- 저자는 특정 클래스의 역할이 어떤 것인지를 조사함으로써 치환 가능성을 생각한다고 함. 만약 계층구조의 각 클래스가 해당 역할을 수행할 수 있다면 그 클래스는 치환 가능한 것. 만약 서브클래스가 어떤 메서드 서명을 변경하거나 특화하는 작업의 일부로 예외를 발생시킨다면, 이것은 해당 역할을 수행하지 못할 수 있으며, 클래스 계층구조를 다르게 배열되어야 한다는 힌트가 될 수 있음.
8.2.3 상속에 대한 이상적인 경우
- 해결하려는 문제는 얕고 좁은 계층 구조.
- 서브클래스는 객체 그래프의 잎 노드에 있음. 즉, 다른 객체들은 사용하지 않음.
- 서브클래스는 자신의 슈퍼클래스의 모든 동작을 사용하거나 특화함.
얕고 좁은 계층구조
- 얕음 : 깊은 상속 계층구조의 문제를 해결. 깊게 중첩된 클래스 계층구조는 관리를 어렵게 하며 버그를 발생시킬 수 있음. 계층구조를 작게 유지하면 필요한 때를 쉽게 판단할 수 있음.
- 좁음 : 계층구조 내 클래스가 너무 많은 서브클래스를 갖지 않음을 의미. 서브클래스의 수가 증가함에 따라 어떤 서브클래스가 특화된 것인지 알기 어려워지며 다른 개발자가 자신에게 필요한 서브클래스를 찾기 못하면 중복된 서브클래스가 생길 수 있음.
'Study > Python' 카테고리의 다른 글
프로그래머를 위한 파이썬 - 8장 #4 (0) | 2021.12.03 |
---|---|
프로그래머를 위한 파이썬 - 8장 #3 (0) | 2021.12.02 |
프로그래머를 위한 파이썬 - 8장 #1 (0) | 2021.11.30 |
프로그래머를 위한 파이썬 - 7장 #2 (0) | 2021.11.29 |
프로그래머를 위한 파이썬 - 7장 #1 (0) | 2021.11.28 |