개발 서적 기록/오브젝트_조영호

35일차 - 상속의 목적 : 서브클래싱 & 서브타이핑 그리고 ISP & LSP

밍 끄적 2023. 9. 15. 21:55
728x90

2023.09.15 FRI

447p ~ 459p

 

34일차 내용 ⬇️

2023.09.15 - [개발 서적 기록/오브젝트_조영호] - 34일차 - 상속의 주 용도인 타입 계층 구현

 

34일차 - 상속의 주 용도인 타입 계층 구현

2023.09.15 FRI 436p ~ 446p 33일차 내용 ⬇️ 2023.09.15 - [개발 서적 기록/오브젝트_조영호] - 33일차 - 포워딩과 위임 그리고 자바스크립트의 상속 33일차 - 포워딩과 위임 그리고 자바스크립트의 상속 2023.

magenta-ming.tistory.com


클라이언트의 기대에 따라서 계층 분리하기

상속을 사용할 수 있는 조건은 두가지였다.

1. is-a 관계로 모델링 되는가

2. 행동 호환성을 보장하는 가

이때 행동 호환성은, 단순히 동일한 메서드를 구현하는 것이 아니라 클라이언트의 관점에서 동일한 행동을 수행할때 보장된다.

 

하지만, 행동 호환성을 만족시키지 않는 상속 계층을 그대로 유지한채 클라이언트의 기대를 충족시키기는 어려우므로, 클라이언트의 기대에 맞게 상속 계층을 분리해야한다.

 

이를 위해서 인터페이스를 클라이언트가 기대하는 바에 따라 분리할 수 있다. 이를 통해 변경에 대한 영향을 더 세밀하게 제어할 수 있다.

클라이언트에 따라 인터페이스를 분리하면, 각 클라이언트의 요구가 바뀌더라도, 영향의 파급 효과를 효과적으로 제어할 수 있다.

이에 기반한 설계 원칙이 인터페이스 분리 원칙 Interface Segregation Principle ( a.k.a ISP ) 이다.

 

상속의 목적 : 서브클래싱 & 서브타이핑

상속은 코드 재사용과 타입 계층 구현을 위해 상속을 사용할 수 있고, 타입 계층 구현을 우선해야한다.

이때 코드 재사용을 위한 상속을 서브 클래싱, 타입 계층 구현을 위한 상속을 서브 타이핑이라고 한다.

 

서브 클래싱

다른 클래스의 코드를 재사용할 목적으로 상속을 사용한다.

자식 클래스와 부모 클래스의 행동이 호환되지 않기 떄문에, 자식 클래스의 인스턴스가 부모 클래스의 인스턴스를 대체할 수 없다.

구현 상속, 클래스 상속이라고도 부른다.

 

서브 타이핑

타입 계층을 구성할 목적으로 상속을 사용한다.

자식 클래스와 부모 클래스의 행동이 호환되기 때문에, 자식 클래스의 인스턴스가 부모 클래스의 인스턴스를 대체할 수 있다.

부모 클래스는 자식 클래스의 super type이 되고, 자식 클래스는 부모 클래스의 sub type이 된다.

인터페이스 상속이라고도 부른다.

 

서브 타이핑 관계가 유지되려면, sub type이 super type이 하는 모든 행동을 동일하게 할 수 있어야하고, 이를 행동 호환성을 만족시킨다고 할 수 있다.

그리고, 이런 행동 호환성은 부모 클래스에 대한 자식 클래스의 대체 가능성을 포함한다.

 

리스코프 치환 원칙 LSP

클라이언트가 차이점을 인식하지 못한 채, 기반 클래스의 인터페이스를 통해 서브클래스를 사용할 수 있어야한다.

따라서 자식 클래스가 부모 클래스를 대체하기 위해서는, 부모 클래스에 대한 클라이언트의 가정을 준수해야한다.

 

 

728x90