공변과 불변 with Kotlin

모던 랭귀지들은 타입바운드 개념을 제공합니다. 타입바운드는 3가지로 분류 할 수 있습니다. 무공변성(invariant), 공변성(covariant), 반공변성(contravariant), 3가지로 분류 할 수 있으며 하나씩 알아보겠습니다.

무공변성(Invariant)

무공변성이란 상속 관계에 상관없이, 자기 타입만 허용하는 것을 말합니다.

공변성(covariant)

공변성은 타입생성자에게 리스코프 치환 법칙을 허용한다는 의미입니다. 코드로 살펴보겠습니다.

반공변성(contravariant)

공변성의 반대 개념을 생각하면 쉽습니다. 자기 자신과 부모 객체만 허용하는 것을 말합니다.

정리

  • 무공변성은 타입 앞에 아무런 키워드가 붙지 않으며, 해당타입 자신만을 허용합니다.
  • 공변성은 out 키워드를 사용하며, 자기자신과 자기자신을 상속받은 타입을 허용합니다.
  • 반공변성은 in 키워드를 사용하며, 자기자신과 자기자신의 슈퍼 타입을 허용합니다.

Contents