더북(TheBook)

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

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