6.2.3 컴파일러에 의한 옵셔널 자동 해제
이번에는 앞서 배운 명시적 해제 이외 컴파일러에 의한 자동 옵셔널 해제에 대해 알아보겠습니다.
let optInt = Int("123")
if (optInt == 123) {
print("optInt == 123")
} else {
print("optInt != 123")
}
// 실행 결과
optInt == 123
강제 해제하지 않은 옵셔널 값은 Optional(123)이므로 정수값 123과 다릅니다. 따라서 else 구문이 실행되어야 하지만 결과는 그렇지 않습니다. 어떻게 된 걸까요?
옵셔널 타입으로 감싼 변수나 상수는 그 값을 사용하기 위해 반드시 "!" 연산자를 사용하여 옵셔널 객체를 해제해야 합니다. 하지만 굳이 해제하지 않아도 괜찮을 때가 있습니다. 비교 연산자를 사용하는 경우가 그에 해당됩니다. 한쪽 타입이 옵셔널, 다른 한쪽이 일반 타입이라면 자동으로 옵셔널을 해제합니다. 따라서 아래 예제 모든 결과는 true 입니다.
let tempInt = Int("123")
tempInt == 123
tempInt == Optional(123)
tempInt! == 123
tempInt! == Optional(123)
옵셔널 값의 할당도 살펴보겠습니다
1. var optValue01 = Optional(123)
2. var optValue02 = Int? = 123
위의 1,2는 동일하다고 볼 수 있습니다. 2번처럼 직접 값을 대입하더라고 타입이 옵셔널 타입이므로, 실제 값은 Optional(123)이 저장됩니다.
Last updated