본문 바로가기
개발새발/코틀린

[코틀린/Kotlin] null처리와 스마트캐스트

by 조희우 2025. 8. 20.

Null 안전성

  • kotlin은 NullPointerException(NPE)를 방지하기 위하여 Null 안전성을 제공
  • 커파일 타임에 null 관련 오류를 방지

null 타입 선언

  • 타입 뒤에 ? 을 붙여서 null이 가능함을 명시
var name: String = "희우"   // null 불가능
var nickname: String? = null  // null 가능 (nullable)

Null-safe 연산자

  1. ?.
    • safe call operator
    • null일 경우에는 실행을 하지 않음
    val length = nickname?.length  // nickname이 null이면 length도 null
    
  2. ?:
    • Elvis operator
    • null일 경우에도 default 값을 줄 수 있음
    val length = nickname?.length ?: 0  // nickname이 null이면 0 반환
    
  3. !!
    • not-null assertion
    • null이 아님을 확신할 때 강제로 사용
    • null일 경우 런타임 에러 발생
    val length = nickname!!.length  // nickname이 null이면 예외 발생
    

스마트 캐스트 (Smart Cast)

  • 조건문에서 null을 체크할 경우 컴파일러가 자동으로 non-null 처리
fun printLength(str: String?) {
    if (str != null) {
        println(str.length)  // 스마트 캐스트로 str은 non-null로 취급
    }
}

문제

1. str이 null이 아니면 길이를 반환하고 null일 경우 0을 반환하는 getLengthOrZero 함수를 구현하시오.

 

답: 

fun getLengthOrZero(str: String?): Int {    
	  return str?.length ?: 0
}

 

2. str이 null이 아니면 대문자로 변환해서 출력하고 null이면 아무것도 처리하지 않는 printUpperIfNotNull 함수를 구현하시오.

답: 

// str이 null이 아니면 대문자로 변환해서 출력, null이면 아무 것도 안함
fun printUpperIfNotNull(str: String?) {
    // 여기 코드 작성
    
		println(str?.uppercase())
}

'개발새발 > 코틀린' 카테고리의 다른 글

[코틀린/Kotlin] sealed class/when  (0) 2025.08.22
[코틀린/Kotlin] 스코프 함수  (0) 2025.08.21
[코틀린/Kotlin] 확장함수  (0) 2025.08.19
[코틀린/Kotlin] 람다와 고차함수  (3) 2025.08.18
[코틀린/Kotlin] 컬렉션  (3) 2025.08.16