다음과 같은 제네릭 클래스가 있다. class Cup 위 코드에서 타입 파라미터 T 는 variance 한정자(out 또는 in )가 없다. 이럴 때는 기본적으로 invariant(불공변성)이다. invariant라는 건 제네릭 타입으로 만들어지는 타입들이 서로 관련성이 없다는 뜻. 말하자면 Cup 과 Cup , Cup 은 전혀 관계없다. 불공변성 관계 fun main() { val anys: Cup = Cup //Error: Type mistach val nothings: Cup = cup() // Error } 만약 어떤 관련성을 원한다면 out 또는 in 이라는 variance 한정자를 붙인다. out 은 타입 파라미터를 covariant(공변성)로 만든다. 이는 A가 B의 서브타입일 때 Cup 가..