더북(TheBook)

4.2.5 엘비스 연산자

널이 될 수 있는 값을 다룰 때 유용한 연산자로 널 복합 연산자(null coalescing operator)?:을 들 수 있다. 이 연산자를 사용하면 널을 대신할 디폴트 값을 지정할 수 있다. 엘비스 프레슬리(Elvis Persley)를 닮았기 때문에 널 복합 연산자를 보통은 엘비스 연산자라고 부른다. 다음 예제를 살펴보자.

fun sayHello(name: String?) {
  println("Hello, " + (name ?: "Unknown"))
}

fun main() {
  sayHello("John") // Hello, John
  sayHello(null)   // Hello, Unknown
}

이 연산자의 결과는 왼쪽 피연산자가 널이 아닐 경우에는 왼쪽 피연산자의 값이고, 왼쪽 피연산자가 널일 경우에는 오른쪽 피연산자의 값이다. 기본적으로 sayHello() 함수는 다음 코드와 같다.

fun sayHello(name: String?) {
  println("Hello, " + (if (name != null) name else "Unknown"))
}

안전한 연산과 엘비스 연산자를 조합해서 수신 객체가 널일 때의 디폴트 값을 지정하면 유용하다. 다음 코드는 프로그램의 표준 입력이 널을 반환할 경우 0n에 대입한다.

val n = readLine()?.toInt() ?: 0
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.