Kotlin/포스팅

코틀린 프로젝션을 사용한 사용 지점 변성

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

코틀린에서 프로젝션(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