스타 프로젝션(Star Projection)은 코틀린에서 사용되는 제네릭 타입에서 일부만을 사용하거나 특정한 변성을 신경 쓰지 않고 모든 타입을 사용할 때 유용한 문법입니다. 스타 프로젝션은 * 기호를 사용하여 표현됩니다.
사용 예제
class Box<T>(val value: T)
fun printBox(box: Box<*>) {
// 어떤 타입이든 상관없이 사용 가능
val value = box.value
println(value)
}
fun main() {
val intBox = Box(42)
val stringBox = Box("Hello")
printBox(intBox) // 출력: 42
printBox(stringBox) // 출력: Hello
}
위의 예제에서 printBox 함수는 Box<*>로 선언되어 있습니다. 이는 모든 Box 인스턴스를 받아들일 수 있습니다. 스타 프로젝션을 사용하면 제네릭 타입의 실제 타입에 대한 정보를 몰라도 해당 타입의 일부 기능을 사용할 수 있습니다.
주의사항
스타 프로젝션을 사용하는 경우에는 제네릭 타입의 실제 타입에 대한 정보를 잃게 되므로, 해당 타입에 대한 실질적인 작업을 할 수는 없습니다. 즉, 읽기 연산은 가능하지만 쓰기 연산은 불가능합니다.
fun modifyBox(box: Box<*>) {
// box.value = newValue // 오류: 스타 프로젝션에서는 쓰기 연산이 불가능
}
val intBox = Box(42)
modifyBox(intBox)
스타 프로젝션은 주로 타입에 대한 제한 없이 어떤 타입이든 다루어야 할 때나, 제네릭 타입의 일부만을 사용할 때 활용됩니다. 그러나 가능하면 타입 정보를 유지하는 더 구체적인 변성을 사용하는 것이 좋습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 애너테이션 (0) | 2024.01.02 |
---|---|
코틀린 타입 별명 (0) | 2024.01.02 |
코틀린 프로젝션을 사용한 사용 지점 변성 (0) | 2024.01.02 |
코틀린 선언 지점 변성 (0) | 2024.01.02 |
코틀린 변성의 생산자와 소비자 구분 (0) | 2024.01.02 |