먼저, Optional에 대해서 간단하게 알아보자.
wrapping 된 값이 있거나 값이 없음을 나타내는 type이다.
예시를 보면, 각각의 타입이 둘 다 Optioanl Int 타입을 가지지만,
하나는 Int 타입인 값을 가지므로 10을 출력할 수 있지만,
다른 하나는 값이 없는 nil이므로 nil을 출력하게 된다.
출력된 10은 Optional Int 타입이므로 Optional(10)의 형태로 출력되게 되고,
unwrap을 해주기 위해선 여러가지 방법이 있다고 공식 문서에 적혀있다.
여러가지 방법이 적혀있었고
nil coalescing operator도 찾아볼 수 있었다.
nil coalescing operator
공식 문서를 먼저 보자.
nil coalescing operator을 수행하여 인스턴스의
Optional의 wrapping된 값 또는 기본값을 반환한다.
nil-coalescing 작업은 값이 있을 경우에 왼쪽을 unwrap 하거나,
오른쪽을 기본값으로 반환한다.
이 작업의 결과는 왼쪽편에 있는 wrapped type의
non - optional(옵셔널이 아닌)이 될 것이다.
이 연산자는 short-circuit evaluation을 사용한다.
optioanl이 먼저 확인이 되고
optioanl이 nil인 경우에만 기본값을 평가하게 된다.
예시를 만들어 보았다.
let goodNumber: Int = Int("100") ?? 50
goodNumber는 Optional 값이다.
변환하려고 하는 String 값이 숫자로만 이루어져 있어야 변환이 일어나기 때문이다.
왼쪽에 있는 Int("100")는 값이 있는지 확인했을 때,
nil이 아니고 값이 존재하므로 unwrap을 하게 되고,
연산자 오른쪽에 있는 기본값 50은 Optional 이었던 Int("100")가
값이 존재하므로 확인하는 과정을 거치지 않게 된다.
따라서, goodNumber의 값은 100이 된다.
let goodNumber = Int("good") ?? 50
변환하려고 하는 String 값이 숫자로만 이루어져 있지 않다.
그러면 Int("good")은 변환에 실패하고 nil임이 확인됨에 따라 연산자 오른편에 있는
기본값인 50을 대체값으로 지정해주게 된다.
위에서 제대로 알지 못했던 nil coalescing의 뜻은 nil을 합친다.
즉, 결과물이 nil로 확인됨에 따라,
기본값으로 nil을 병합하여 반환해준다는 작업으로 해석할 수 있겠다.
forced unwrapping도 Optional을 해제할 수 있는 방법 중의 하나이다.
import Foundation
let number: Int = Int("1000")!
print(number) // 1000
String 값인 1000을 Int로 100% 변환할 수 있다는 확신이 있기 때문에
forced unwrapping을 사용함으로써
오류가 발생하지 않고
Optional 값을 열 수 있었지만 위와 같은 경우와 달리,
값이 nil일 경우, 오류가 발생하게 된다.
따라서, Optional을 해제할 때에는
무조건! 안전하게 unwrap 하는 방법을 지향하도록 하자.
'iOS' 카테고리의 다른 글
ATS와 HTTP / HTTPS에 대하여... (0) | 2023.05.25 |
---|---|
JSON 파일을 직접 만들고 가져오는 방법? (0) | 2023.05.10 |
Code로 CollectionView를 만드는 방법 (Storyboard X) (0) | 2023.04.21 |
JIRA 사용법 (0) | 2023.04.21 |
어바웃라멘 지원 / 개인 정보 처리 방침 (0) | 2023.03.24 |