반대로 이 인터페이스에 T 타입을 인자로 받는 함수만 있고 T 타입을 반환하는 함수는 없다면 in을 사용해 타입 파라미터를 반공변성으로 만들 수 있다.
open class MyClassParent class MyClass: MyClassParent() interface Bag<in T> { fun use(t: T): Boolean } class BagImpl : Bag<MyClassParent> { override fun use(t: MyClassParent): Boolean = true } val bag: Bag<MyClass> = BagImpl()
in이나 out을 하나도 지정하지 않으면 파라미터 타입은 무공변성이다. out과 in 중 어떤 것을 선택할지는 타입을 오직 출력(반환 값)에 쓰면 out을, 오직 입력(인자 값)에 쓰면 in을 사용한다고 기억하면 간단하다.