안녕하세요! 이제 밖에 날씨가 엄청 더워졌네요~ 그래도 코딩 공부는 열심히 해야겠습니다. 오늘은 옵셔널을 언래핑하는 방법인 nil 병합 연산자에 대해서 알아보겠습니다. 앞서 공부했던 강제 언래핑, 옵셔널 바인딩, 옵셔널 체이닝이 있었고 이번엔 마지막 언래핑 방법이네요. 그럼 더 자세히 알아보겠습니다.
nil 병합 연산자은 영어로 nil coalescing operator입니다. coalescing을 한국어로 해석해보자면 "하나로 합치다" 라는 뜻이됩니다. 즉 nil 병합 연산자는 nil을 하나로 만든다는 느낌으로 생각하면 될것 같습니다.
Force unwrapping : !를 써서 강제로 옵셔널 추출
Optional Binding : if let, guard let을 써서 옵셔널 추출
Optional Chaining : 체인의 형태처럼 연쇄적으로 옵셔널에 접근
nil coalescing operator : ??을 써서 아주 간단히 언래핑
nil 병합 연산자의 장점은 '??'를 사용하여 표기하여 한줄로 언래핑을 아주 쉽게 수행할 수 있습니다. 옵셔널 바인딩이나 옵셔널 체이닝의 경우 if let이나 guard let을 써야해서 코드가 길어질 수 있지만 nil 병합 연산자는 한줄로 쓸 수 있다는 장점이 있죠! 그럼 간단한 코드를 통해 알아보겠습니다.
let a : Int? = 10
var b : Int
if let a = a {
b = a
print(b)
}
위의 코드와 같이 옵셔널 타입 a와 Int형 b 변수를 선언하고 옵셔널 바인딩을 통해 옵셔널을 추출하여 만약 a가 nil이 아니라면 b에 a를 넣는 코드를 만들었습니다. a를 선언할때 10이라는 초기값을 주었고 nil값은 들어가지 않았으므로 b에 10이 들어가 출력이 될 것입니다.
위의 코드를 nil 병합 연산자를 이용해서 짜보겠습니다.
let a : Int? = 10
var b : Int
b = a ?? 0
print(b)
위 와 동일한 코드입니다. 똑같이 옵셔널 상수와 일반 변수를 선언하였습니다. 하지만
"b = a ?? 0"의 코드를 사용하여 한줄로 표현을 했습니다. 코드를 알아보면 a에 값이 있을 경우 a를 b에 넣고 만약 nil이라 없을 경우 0을 넣는다는 뜻입니다. 위 코드에서는 a에 10이 들어가 있으므로 b에는 10이 들어갈 것입니다.
그리고 여기서 중요하게 보아야 할 부분은 b에 10이 들어간 것은 확인을 했지만 a자체가 들어간 것이 아닌 것을 확인할 수 있습니다. a는 옵셔널 타입이므로 a는 Optioanl(10)이 들어가 있습니다. 하지만 nil 병합 연산자를 사용하여 b에 a값을 넣었을때는 10이 나왔습니다. 옵셔널을 언래핑하여 대입을 해준다는 사실을 알 수 있죠!!
nil 병합 연산자
옵셔널 변수 ?? nil일 경우 행동
오늘은 nil 병합 연산자에 대해서 알아보았습니다. 앞서 배웠던 옵셔널 바인딩이나 옵셔널 체이닝보다 훨씬 짧고 간단하게 사용할 수 있어서 매우 많이 사용할 것이라고 생각이 됩니다. 그럼 오늘 하루도 수고 많으셨습니다!