https://itchallenger.tistory.com/382?category=1091150
타입스크립트의 타입 불건전성에 대하여 2 : 공식 예제 코드 살펴보기
https://www.typescriptlang.org/play?strictFunctionTypes=false#example/soundness TS Playground - An online editor for exploring TypeScript and JavaScript The Playground lets you write TypeScript or J..
itchallenger.tistory.com
함수 파라미터는 반공변성, 리턴 타입은 공변성을 갖는다.
(예제 코드는 위 글의 2. Function Parameter Bi-variance(이분산) 부분을 참고하자.)
그 이유는 리스코프 치환 원칙 때문이다.
리스코프 치환 원칙 - 위키백과, 우리 모두의 백과사전
치환성(영어: substitutability)은 객체 지향 프로그래밍 원칙이다. 컴퓨터 프로그램에서 자료형 S {\displaystyle S} 가 자료형 T {\displaystyle T} 의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는
ko.wikipedia.org
리스코프의 원칙은 새로운 객체 지향 프로그래밍 언어에 채용된 시그니처에 관한 몇 가지 표준적인 요구사항을 강제한다.
(즉 여기서 메서드 인수와 반환형의 반공변성, 공변성이 함수에 적용되는 것이다.)
공변성은 타입 파라미터(제네릭)의 관계이기 때문에, 객체지향 프로그래밍에서는 생각보다 볼 일이 없다.
객체지향 프로그래밍에서 제네릭이 유용한 경우는 거의 컬렉션밖에 없기 때문이다.
추가로 LSP는 문법적인 의미 뿐만 아니라, 문맥(업무)적인 의미도 갖는다.
- 하위형에서 선행조건은 강화될 수 없다.
- 기본 클래스가 memberId:number 필드를 갖고 있다 가정하자.
- 하위 클래스에서 해당 필드가 양수 number여야 한다고 가정하자.
- 전제 조건이 강화되었다. 이 경우 업무 조건에 따라 기본 클래스를 하위 클래스 위치에 적용할 수 없으므로, LSP가 깨진다.
- 하위형에서 후행조건은 약화될 수 없다.
- 기본 클래스는 양수 정수임을 판별한다.
- 하위 클래스는 정수임을 판별한다.
- 후행 조건이 약화되었다. 이제 하위 클래스 판별식을 통과하는 인자는 기본 클래스 판별식을 통과하지 못할 수 있다. LSP가 깨졌다.
- 하위형에서 상위형의 불변조건은 반드시 유지되어야 한다.
- 위 두 케이스보다 업무적인 이야기이다.
- 예를 들어, 길이 속성이 int이고 배열이 T[]인 List<T> 클래스가 있는 경우 해당 클래스의 모든 메서드에서 Length가 항상 길이보다 작거나 같다고 가정할 수 있다. 이것은 해당 클래스의 불변조건이다.
- List<T>의 하위 클래스가 Length가 (어떤 상황에서도) 배열의 길이보다 클 수 있도록 만드는 경우 하위 클래스는 해당 불변조건을 위반하게 된다.
'FrontEnd' 카테고리의 다른 글
타입스트립트의 타입시스템으로 산수 구현하기 (0) | 2022.04.27 |
---|---|
React Remix Framework로 알아보는 중첩 경로(nested routing) (0) | 2022.04.26 |
타입스크립트의 타입 대수(type argebra)를 통해 타입 오류 분석하기 (0) | 2022.03.27 |
타입스크립트 타입 호환성과 타입 계층 트리 (0) | 2022.03.27 |
아폴로 클라이언트로 알아보는 클라이언트 아키텍처 [Apollo Client & Client-side Architecture Basics] (0) | 2022.03.27 |