본문 바로가기
iOS/Swift

[Swift] Nil 결합 연산자(Nil-Coalescing Operator)

by Dev.Andy 2023. 4. 11.

저번 포스팅에서 Swift의 기본 연산자에 대해 알아 보았다. 기본 연산자는 프로그래밍 언어의 공통적인 부분이라면, 이번 내용은 '옵셔널(optional)'이라는 자료형이 있는 Swift만의 독특한 연산자라 할 수 있다.

 

[Swift] 기본 연산자(Basic Operators)

📌 용어(Terminology) 1. 단항 연산자(Unary Operator) 단일한 항목(single targets)에 작동하는 연산자. 접두사(prefix)와 접미사(postfix)로 나누어짐. var a, b, c -a b c! 2. 이항 연산자(Binary Operator) 2개의 항목(two ta

andy-archive.tistory.com

 

📌 Nil 결합 연산자의 기본 형식

Nil 결합 연산자의 기본 형식은 a ?? b인데, 옵셔널 a가 값이 있으면 a를 언래핑하고, a가 nil일 경우 default 값인 b를 반환한다.

a ?? b

a는 항상 옵셔널 타입이여야 하고, b는 a와 같은 자료형이어야 한다.

 

📌 삼항 조건 연산자로 표현 했을 때

삼항 조건 연산자로 표현하면 아래와 같다

a != nil ? a! : b // a가 nil이 아닐 경우 a를 언래핑하여 할당, nil일 경우 b를 할당

 

📌 실습

(1) 옵셔널을 정의할 경우

변수 하나는 직접 값을 할당했고, 다른 하나는 옵셔널로 정의했다.

let defaultFontColor = "black" // "black"
var userDefinedColor: String? // nil

var colorToUse = userDefinedColor ?? defaultFontColor // "black"

 

  1. userDefinedColor의 타입이 *Optional<String>*이고 값이 nil이므로
  2. 변수 colorToUse에 defaultFontColor의 값을 반환한다.

(2) 옵셔널을 정의하지 않을 경우

변수 두 개에 직접 값을 할당했다.

let defaultFontColor = "black" // "black"
var userDefinedColor = "blue" // "blue"

var colorToUse = userDefinedColor ?? defaultFontColor // "blue"

 

  1. 두 변수가 실제로 nil이 아닌 값이 할당되어서
  2. 변수 colorToUse에 userDefinedColor의 값을 반환한다.

단축 평가(short-circuit evaluation)

이렇게 되면 연산자 우측의 default 값을 절대로 쓰이지 않게 되는데 이를 단축 평가(short-circuit evaluation)라 한다.

단축 평가의 경우에는 아래와 같은 경고 메시지가 나온다.

Left side of nil coalescing operator '??' has non-optional type 'String', so the right side is never used

 

댓글