[kotlin] 코틀린에서 제네릭과 널 안전성을 함께 사용하는 방법은 어떻게 되는가?

코틀린은 강력한 널 안전성을 제공하는 언어입니다. 제네릭과 널 안전성을 함께 사용하는 방법에 대해 알아보겠습니다.

1. 제네릭 클래스 선언

널 안전성과 제네릭을 함께 사용하려면, 클래스나 함수를 선언할 때 제네릭 타입 매개변수를 널 가능한 타입으로 선언해야 합니다.

class Box<T : Any?> {
    // ...
}

위의 예제에서 T : Any?T가 널이 될 수 있는 타입이라는 것을 나타냅니다.

2. 널 가능성 처리

제네릭으로 선언된 타입을 사용할 때는 타입이 널일 수 있는지에 대한 처리를 해주어야 합니다. 일반적으로 null 체크를 수행하여 널일 때와 널이 아닐 때의 로직을 처리합니다.

fun <T : Any> printValue(item: T?) {
    if (item != null) {
        println(item.toString())
    } else {
        println("Value is null")
    }
}

위의 예제에서 T에 대한 널 체크를 수행하여 안전하게 값을 처리하고 있습니다.

3. 널 안전성 연산자(?.)의 활용

코틀린은 널 안전성을 위해 ?. 연산자를 제공합니다. 이를 활용하여 제네릭으로 선언된 객체의 메서드나 프로퍼티에 접근할 때 널 처리를 간편하게 수행할 수 있습니다.

val length: Int? = text?.length

위의 예제에서는 text가 널이 아닐 경우에만 length에 접근하여 안전하게 처리하고 있습니다.

요약

코틀린에서 제네릭과 널 안전성을 함께 사용하기 위해서는 제네릭 타입 매개변수를 널이 될 수 있는 타입으로 정의하고, 널 가능성을 처리하는 로직에서는 널 체크를 수행하여 안전하게 코드를 작성해야 합니다.

이렇게 함으로써, 코틀린의 강력한 널 안전성과 제네릭의 유연성을 함께 활용할 수 있습니다.

참고: Kotlin 공식 문서