Kotlin/포스팅

코틀린 스타 프로젝션

짜집퍼박사(짜박) 2024. 1. 2. 21:54

스타 프로젝션(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