TL; DR
무공변성(invariant) - 자기 자신 타입만 허용
공변성(covariant) - out 키워드를 사용하며 자기 자신과 하위 타입만 허용
반공변성(contravariant) - in 키워드를 사용하며, 자기 자신과 상위 타입만 허용
무공변성(Invariant)
상속 관계에 상관 없이, 자기 타입만 허용합니다
공변성(Covariant)
리스코프 치환법칙을 허용한다는 의미로 자기 타입과 그 하위 타입을 허용합니다
(S 클래스가 T 클래스의 자식이라면 프로그램에서 S 의 객체는 프로그램의 속성을 변경하지 않고, T 의 객체로 교체할 수 있다) 최소한 자식클래스가 부모클래스의 행위를 모두 만족해야한다는 의미이고 즉 업캐스팅만 해라! 의미이다
11번째 코드라인에 out 키워드가 사용되었습니다
반공변성(Contravariant)
위에서 이야기한 공변성의 반대개념으로 자기 자신과 그 상위 타입만 허용합니다.
마찬가지로 11번째 코드라인에 in 키워드가 사용되었습니다
'Kotlin & Java' 카테고리의 다른 글
자바 기본 타입 (Primitive type) (0) | 2020.02.27 |
---|---|
간단하게 코루틴 알아보기 (0) | 2020.02.16 |
[Java ] 두개의 리스트에서 중복되는 객체 비교 (0) | 2018.11.08 |
What is CALL BACK? 콜백 (0) | 2017.05.12 |
자바 객체 비교 (2) | 2017.05.01 |