반응형
찾아본 내용
1. 하위 타입에 대한 두가지 규칙
1. 하위 타입은 상위 타입이 선언하는 것과 최소한 동일한 범위의 타입을 수용해야한다. (in)
2. 하위 타입은 상위 타입이 선언하는 것과 최대한 동일한 범위의 타입을 반환해야한다. (out)
2. 공변성
1. 하위 타입(Dog)은 상위 타입(Animal)보다 구체적이므로 최소한 동일한 범위의 타입을 수용할 수 없다.
2. 하위 타입(Dog)은 상위 타입(Animal)보다 구체적이므로 최대한 동일한 범위의 타입을 반환할 수 있다.
따라서 하위 타입에 대해 공변성을 만족하려면 out 에 대해서만 정의 가능
3. 반공변성
1. 하위 타입(Animal)은 상위 타입(Dog)보다 추상적이므로 최소한 동일한 범위의 타입을 수용할 수 있다.
2. 하위 타입(Animal)은 상위 타입(Dog)보다 추상적이므로 최대한 동일한 범위의 타입을 반환할 수 없다.
따라서 하위 타입에 대해 반공변성을 만족하려면 in 에 대해서만 정의 가능
4. 해결 방법
1. interface 분리하여 두가지 모두 implement
2. in, out 이용한 선언 지점 변성
2번 가능한 이유 = 타입 프로젝션
- out projection : in type parameter가 Nothing이 되어 하위 타입이 더 추상적이게 된다
- in projection : out type parameter가 Any?가 되어 하위 타입이 더 구체적이게 된다
참고
반응형
'독서' 카테고리의 다른 글
[코틀린 인 액션] 11. DSL 만들기 (0) | 2024.06.02 |
---|---|
[코틀린 인 액션] 10장. 애너테이션과 리플렉션 (0) | 2024.05.26 |
[코틀린 인 액션] 8장. 고차 함수: 파라미터와 반환 값으로 람다 사용 (0) | 2024.05.13 |
[코틀린 인 액션] 6장. 코틀린 타입 시스템 (1) | 2024.04.21 |
[코틀린 인 액션] 5장. 람다로 프로그래밍 (0) | 2024.04.14 |