코틀린에서 프로젝션(projection)은 제네릭 타입의 일부만을 사용하거나 제한하여 변성을 다루는 방법입니다. 프로젝션을 통해 사용 지점에서 타입의 변성을 다양하게 조절할 수 있습니다. 코틀린에서는 세 가지 종류의 프로젝션을 사용합니다: 선언 지점 변성(out), 하위 타입 제한(in), 스타 프로젝션(*).
1. 선언 지점 변성 (out)
선언 지점 변성은 제네릭 타입을 사용하는 곳에서만 특정 타입 파라미터를 더 상위 타입으로 취급하는 방법입니다. out 키워드를 사용합니다.
class Box<out T>(val value: T)
fun useProducer(producer: Box<out Any>) {
// 생산된 값을 사용하는 로직
}
val stringProducer: Box<String> = // ...
useProducer(stringProducer) // Box<out Any>로 사용 가능
2. 하위 타입 제한 (in)
하위 타입 제한은 제네릭 타입을 사용하는 곳에서 특정 타입 파라미터를 더 하위 타입으로 취급하는 방법입니다. in 키워드를 사용합니다.
class Box<in T> {
fun consume(item: T) {
// item을 소비하는 로직
}
}
fun useConsumer(consumer: Box<in String>) {
// 소비 로직
}
val anyConsumer: Box<Any> = // ...
useConsumer(anyConsumer) // Box<in String>으로 사용 가능
3. 스타 프로젝션 (*)
스타 프로젝션은 제네릭 타입에서 일부 타입을 모두 사용 가능한 상태로 취급하는 방법입니다. * 기호를 사용합니다. 스타 프로젝션은 일반적으로 제네릭 타입이 어떤 타입을 생산하거나 소비하는지 알 수 없을 때 유용합니다.
un useBox(box: Box<*>) {
// 어떤 타입이든 사용 가능
}
val stringBox: Box<String> = // ...
useBox(stringBox) // Box<*>로 사용 가능
프로젝션을 통해 제네릭 타입의 일부만을 사용하거나 제한하여 유연성을 확보할 수 있습니다. 각각의 프로젝션 방식은 다른 상황에서 적절하게 사용됩니다. 상황에 맞게 out, in, 또는 *를 선택하여 사용할 수 있습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 타입 별명 (0) | 2024.01.02 |
---|---|
코틀린 스타 프로젝션 (0) | 2024.01.02 |
코틀린 선언 지점 변성 (0) | 2024.01.02 |
코틀린 변성의 생산자와 소비자 구분 (0) | 2024.01.02 |
코틀린 변성 (0) | 2024.01.02 |