Kotlin (1)

Writings on Kotlin.

공변성과 반공변성(Covariance and Contravariance)

명시적이어야 하는 제네릭 공변성(covariance)을 얘기하기 전에 제네릭(Generic)에 대해서 간략하게 짚고 넘어가야 하는 게 있다. 제네릭은 런타임에 타입을 확정 짓는다. 컴파일 단계에서는 제네릭이 어떤 타입인지 알 수 없다는 것이다. 따라서, 제네릭은 엄격해야 한다. T라는 제네릭의 위치에 T의 서브 타입이 올 수는 없다. 이것에 중점을 두고 이해를 하자. 상속 관계인 클래스 간의 제네릭 아주 간단한 예시를 들어보자. Animal 클래스를 상속하는 Cat, Dog, Bird라는 클래스가 있다. Animal 클래스를 담는 배열을 만들고 Cat, Dog, Bird를 무작위로 넣었다고 가정해보자. 상속 관계가 있으므로 문제없이 들어갈 것이다. 하지만 이것은 우리가 상속 관계를 알고 있기 때문에 문제가 발생하지 않을 것을 아는 것이다. 제네릭은 런타임에 타입을 결정한다. 그렇기 때문에 컴파일 단계에서는 이들의 상속관계를 알 방법이 없다. 일단 들어는 왔는데 Animal의 Ca

  • Kotlin
2021 © Cinntiq's Studio