[kotlin] 널 안전성을 갖춘 코드 작성 시 주의사항

Kotlin은 널 안전성을 갖춘 언어로, 널 포인터 예외를 방지하기 위해 설계되었습니다. 하지만, 여전히 몇 가지 주의사항이 있습니다. 이 포스팅에서는 Kotlin에서 널 안전성 코드를 작성할 때 주의해야 할 사항을 살펴보겠습니다.

1. 널이 될 수 있는 타입을 다룰 때 주의

널이 될 수 있는 타입을 안전하게 다루기 위해 Kotlin은 널 타입 체크나 안전한 캐스트를 제공합니다. 그러나 다소 복잡한 경우가 있을 수 있으므로, 널이 될 수 있는 타입을 다룰 때에는 항상 안전한 방어적 코드를 작성해야 합니다.

예시:

val nullableString: String? = possiblyNullFunction()
val length: Int = nullableString?.length ?: 0

2. 자바와의 상호운용 시 주의

Kotlin은 자바와의 상호운용이 가능하며, 이 때 널 안전성을 유지하는 것이 중요합니다. 자바와의 상호운용 시에 널이 될 수 있는 타입을 올바르게 처리하기 위해 @Nullable@NotNull 어노테이션을 사용하여 코드를 명확히 해야 합니다.

예시:

fun processNonNullString(str: String) {
    // ...
}

// 자바에서 호출 시 널 체크가 필요
// Kotlin에서는 자동으로 널 체크되지 않음
fun processString(str: String?) {
    if (str != null) {
        processNonNullString(str)
    }
}

3. 안전한 널 타입 변경

널이 될 수 있는 타입을 안전하게 변경하는 작업은 주의가 필요합니다. !! 연산자를 남발하지 말고, 안전한 as? 연산자 등을 사용하여 널 체크를 항상 수행해야 합니다.

예시:

val stringLength: Int = possiblyNullString?.length ?: 0
val intValue: Int? = possiblyNullString as? Int

Kotlin에서의 널 안전성은 안정적인 애플리케이션을 구축하는 데 중요한 요소입니다. 위 주의사항을 준수하면 보다 안전하고 견고한 코드를 작성할 수 있습니다.