반대로 이 인터페이스에 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을 하나도 지정하지 않으면 파라미터 타입은 무공변성이다. outin 중 어떤 것을 선택할지는 타입을 오직 출력(반환 값)에 쓰면 out을, 오직 입력(인자 값)에 쓰면 in을 사용한다고 기억하면 간단하다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.