본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 34. 제네릭 상속(in/out)

by 김마리님 2020. 12. 11.

Int는 Any를 상속한다.

그럼, AAA<Int>는 AAA<Any>를 상속할까? 아니다. 이 Int는 Any를 상속하지만, 이것이 제네릭이 되는 순간 이 둘은 별개의 값이 된다.

 

(상속하려는 경우에 오류가 발생하는 것을 볼 수 있다)

 

이것을 어떻게 상속할 수 있을까? 이것을 해결해줄 키워드가 in/out이다.

 

package inOutEx

class AAA <out T>
class BBB <in T>

fun main() {
    val aaaSub = AAA<Int>()
    val aaaSuper : AAA<Any> = aaaSub

    val bbbSub = BBB<Any>()
    val bbbSuper : BBB<Int> = bbbSub

    val star : AAA<*> = aaaSub
}

 

out 키워드는 슈퍼 클래스에 서브 클래스를 대입할 수 있게 해주고,

in 키워드는 서브 클래스에 슈퍼 클래스를 대입할 수 있게 해준다.

반응형