PHpullh
학습 라이브러리/Kotlin/Null 안전성 — ?, ?., ?:, !!

KOTLIN · 기초 문법

Null 안전성 — ?, ?., ?:, !!

Kotlin의 핵심 기능. 컴파일 타임에 NullPointerException을 방지하는 타입 시스템.

기초 문법입문nullable??.?:!!

핵심 설명

Kotlin의 핵심 기능. 컴파일 타임에 NullPointerException을 방지하는 타입 시스템.

Kotlin code

// Non-null 타입 (기본) — null 불가
var name: String = "Kotlin"
// name = null  // ❌ 컴파일 에러

// Nullable 타입 — ? 붙이기
var nickname: String? = "Dev"
nickname = null  // ✅

// Safe call (?.) — null이면 null 반환
val length = nickname?.length        // Int?

// Elvis operator (?:) — null이면 기본값
val len = nickname?.length ?: 0      // Int

// Non-null assertion (!!) — null이면 NPE
// 확실히 null이 아닐 때만 사용
val forced = nickname!!.length       // 위험!

// let으로 null 아닌 경우만 실행
nickname?.let { nick ->
    println("닉네임 길이: ${nick.length}")
}

// 안전한 타입 캐스팅
val obj: Any = "hello"
val str: String? = obj as? String    // 실패 시 null

학습 팁

?: Elvis 연산자는 null일 때 기본값을 제공합니다. throw도 표현식이라 val x = y ?: throw IllegalArgumentException("null!")도 가능합니다.

주의할 점

!!를 남용하면 Java NPE와 동일합니다. ?., ?:, let으로 해결 가능한 경우 !!는 피하세요.

자주 묻는 질문

Null 안전성 — ?, ?., ?:, !!란 무엇인가요?

Kotlin의 핵심 기능. 컴파일 타임에 NullPointerException을 방지하는 타입 시스템.

Null 안전성 — ?, ?., ?:, !! 학습 시 주의할 점은 무엇인가요?

!! 를 남용하면 Java NPE와 동일합니다. ?. , ?: , let 으로 해결 가능한 경우 !! 는 피하세요.