반대로 이 인터페이스에 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을 사용한다고 기억하면 간단하다.