파비의 매일매일 공부기록

프로그래머를 위한 파이썬 - 8장 #2 본문

Study/Python

프로그래머를 위한 파이썬 - 8장 #2

fabichoi 2021. 12. 1. 23:30

8.2 프로그래밍의 상속
- 상속은 나쁜 평판을 얻어왔다. 복잡한 계층구조로 인한 고통 때문.

8.2.1 실제로 상속은 어디에 쓰이는 것인가?
- 상속은 동작의 특화를 위한 것.
- 코드를 재사용하기 위해서만 서브클래스로 만드는 것은 피해야 함. 다른 값을 반환하거나 다른 작업을 하기 위한 서브클래스를 만들 것.
- 서브클래스는 슈퍼클래스의 특별한 경우처럼 취급되어야 함.
- 서브클래스는 슈퍼클래스의 코드를 재사용하지만, 서브클래스의 인스턴스는 슈퍼클래스의 인스턴스라는 개념이 자연스러운 결과를 만듦.
- 동작을 특화하기 위해 상속을 사용하는 것은 첫 단계임. 

8.2.2 치환 가능성
- 프로그램에서 클래스의 모든 인스턴스는 프로그램의 정확성에 영향을 미치지 않으면서 서브클래스 중 하나의 인스턴스로 대체 가능해야 함.
- 콘텍스트의 정확성은 프로그램에 오류가 없으며, 정확한 결과는 각각 다르거나 다른 방식으로 달성되겠지만, 동일한 기본 결과를 달성한다는 것을 의미.
- 치환 가능성은 슈퍼클래스의 인터페이스를 엄격하게 준수하는 서브클래스에서 발생.
- 저자는 특정 클래스의 역할이 어떤 것인지를 조사함으로써 치환 가능성을 생각한다고 함. 만약 계층구조의 각 클래스가 해당 역할을 수행할 수 있다면 그 클래스는 치환 가능한 것. 만약 서브클래스가 어떤 메서드 서명을 변경하거나 특화하는 작업의 일부로 예외를 발생시킨다면, 이것은 해당 역할을 수행하지 못할 수 있으며, 클래스 계층구조를 다르게 배열되어야 한다는 힌트가 될 수 있음.

8.2.3 상속에 대한 이상적인 경우
- 해결하려는 문제는 얕고 좁은 계층 구조.
- 서브클래스는 객체 그래프의 잎 노드에 있음. 즉, 다른 객체들은 사용하지 않음.
- 서브클래스는 자신의 슈퍼클래스의 모든 동작을 사용하거나 특화함.

얕고 좁은 계층구조
- 얕음 : 깊은 상속 계층구조의 문제를 해결. 깊게 중첩된 클래스 계층구조는 관리를 어렵게 하며 버그를 발생시킬 수 있음. 계층구조를 작게 유지하면 필요한 때를 쉽게 판단할 수 있음.
- 좁음 : 계층구조 내 클래스가 너무 많은 서브클래스를 갖지 않음을 의미. 서브클래스의 수가 증가함에 따라 어떤 서브클래스가 특화된 것인지 알기 어려워지며 다른 개발자가 자신에게 필요한 서브클래스를 찾기 못하면 중복된 서브클래스가 생길 수 있음.

반응형
Comments