상세 컨텐츠

본문 제목

[Kotlin] 가변성

카테고리 없음

by 독서와 여행 2021. 4. 7. 23:45

본문

공변성, 반공변성, 무변성

 

글로만 읽으면 어떤 의미 인지 몰랐는데 좀 이해가 간다.

 

일단 클래스 관계를 먼저 보면 Nothing -> Int -> Any  이렇게로 오른쪽으로 갈 수록 다 상위 클래스다.

 

먼저 무변성

 

class Box<T>(val size :Int)

fun main(){
    val anys:Box<Any> = Box<Int>(10) // 오류 자료형 불일치
    val nothings:Box<Nothin> = Box<Int>(10) // 오류 자료형 불일치
}

out 과 in이 없는 거다 위처럼 아에 관계가 없는 무변성

 

공변성은 

 

class Box<out T>(val size :Int)

fun main(){
    val anys:Box<Any> = Box<Int>(10) // 관계 성립으로 객체 생성 가능
    val nothings:Box<Nothin> = Box<Int>(10) // 오류 자료형 불일치
}

out T니까 T 밖에서 가능하다 즉 T 밑에 있는 자료형도 가능하다 뭐 이런식으로 이해하면 되는건가?

+추가 : out은 반환형 자료형에만 사용이 가능하다. 즉

 

fun set(new:T){

~~

} 이런 자료형에는 사용불가! 아 그리고 매개변수에 var는 사용 못 함! val을 사용해야한다.

var을 사용하기 위해서는 private를 붙여서 사용!

 

out T하게되면 자신보다 하위 클래스도 가능하게 된다.

 

class Box<In T>(val size :Int)

fun main(){
    val anys:Box<Any> = Box<Int>(10) // 오류 자료형 불일치
    val nothings:Box<Nothin> = Box<Int>(10) // 관계 성립으로 객체 생성 가능
}

In은 그 반대겠지 상위 클래스를 사용할 수 있게 된다.

 

추가할 내용들이 생기면 추가해야지

댓글 영역