본문으로 바로가기

0. 소개

코틀린은 널 값을 안전하게 다루기 위해 몇 가지 특별한 연산자를 제공합니다.

코틀린의 연산자들은 불필요한 null 검사를 피하고 코드를 더욱 간결하게 만들 수 있습니다.

소개할 연산자는 타입 뒤에 붙여서 사용합니다.

 

1. 안전 호출 연산자(?.)

이 연산자는 null이 아닌 경우에만 메서드를 호출하거나 프로퍼티를 참조하게 해 줍니다.

만약 객체가 null이면, 연산자 오른쪽의 메서드나 프로퍼티 호출은 무시되고 전체 표현식은 null을 반환합니다.

?. 예시

val a = "Kotlin"
val b: String? = null
println(a?.length)  // 출력: 6
println(b?.length)  // 출력: null (b가 null일 경우 String 클래스의 length 메소드를 참조 X)

 

2. 엘비스 연산자(?:)

이 연산자는 왼쪽 피연산자가 null이 아니면 그 값을 반환하고, null이면 오른쪽 피연산자를 반환합니다.

이 연산자는 null일 때 기본값을 제공하는 데 유용합니다.

?: 예시

val l: Int = if (b != null) b.length else -1
// 또는 엘비스 연산자를 사용하여
val l = b?.length ?: -1

 

3. 강제 타입 변환 연산자(!!)

이 연산자는 변수가 null이 아님을 보장합니다.

변수가 null인 경우에는 NullPointerException을 발생시킵니다.

이 연산자는 null이 아니라는 것이 확실할 때만 사용해야 합니다.

!! 예시

val l = b!!.length // b가 null이면, NullPointerException 발생

 

4. 안전 타입 변환 연산자(as?)

이 연산자는 as 연산자의 안전한 버전입니다. 변환이 실패하면 as? 는 null을 반환합니다.

as? 예시

val aInt: Int? = a as? Int  // String을 Int로 변환할 수 없으므로 null 반환

 

코틀린 as 연산자

코틀린에서 as 연산자는 타입 변환, 타입 검사할 때 사용합니다.

자바에서는 클래스 이름을 사용하여 타입 캐스팅을 이용해 타입 변환, instanceof를 이용해 타입 검사를 합니다.

Object obj = "Hello";
String str = (String) obj; // obj를 String으로 캐스팅합니다.

Object obj = 123;
if (obj instanceof String) {
    String str = (String) obj;
} else {
    System.out.println("Cannot cast to String");
}

 

그렇다면 Null이 아님을 확인하는 함수  checkNotNull()

val a = "Kotlin"
val b: String? = null

val l = checkNotNull(b) { "b cannot be null" } // 'b'가 null이므로, 예외를 발생시킵니다.