🔍 덜 무딘 도구를 사용하거나 코드 제어 흐름을 고쳐 써서 컴파일러가 스마트 캐스트를 적용할 수 있게 하는 편이 더 낫다.

(널 아님 단언보다는 가능하면) 덜 무딘 도구를 사용하거나 코드 제어 흐름을 고쳐 써서 컴파일러가 스마트 캐스트를 적용할 수 있게 하는 편이 더 낫다.

1. 덜 무딘 도구(non-null assertion)이란?

"!! (non-null assertion)"보다 더 안전하고 세련된 방식으로 null을 처리하는 기법들을 지칭합니다.

2. 덜 무딘 도구의 예시

즉, !!는 컴파일러의 경고를 무시하고 null이 아님을 강제로 단언하는 **"무딘 도구"**이며, "덜 무딘 도구"는 다음과 같은 대안들을 의미합니다:

✅ 1. ?.let { ... }

널이 아닐 때만 블록을 실행하게 하므로, 안전하게 null 처리를 할 수 있습니다.

fun sayHello() {
    name?.let {
        println(it.uppercase())  // name이 null이면 아무 일도 안 일어남
    }
}

✅ 2. if (name != null) + 스마트 캐스트

!! 없이 컴파일러가 자동으로 타입을 좁혀줍니다.

fun sayHello() {
    if (name != null) {
        println(name.uppercase())  // 스마트 캐스트로 name은 non-null String
    }
}

✅ 3. 엘비스 연산자 (?:)를 통한 기본값 처리

fun sayHello() {
    println((name ?: "Anonymous").uppercase())
}

🔧 정리: !!는 왜 "무딘 도구"인가?