6.2.4 옵셔널의 묵시적 해제
옵셔널 타입을 해제하는 방법 중 묵시적 해제라는 개념이 존재합니다. 비록 옵셔널 타입이지만 값을 사용할 때에는 자동으로 옵셔널이 해제되기 때문에 굳이 "!" 연산자를 사용하여 하제할 필요가 없는 편리한 구문입니다. 묵시적 해제 구문은 "?" 연산자 대신 "!" 연산자만 붙여주면 됩니다. 명시적 옵셔널과 묵시적 옵셔널을 예시를 통해 보겠습니다.
// 명시적 옵셔널
var str: String? = "Swift"
print(str)
// 실행 결과
Optional("Swift")
// 묵시적 옵셔널
var str: String! = "Swift"
print(str)
// 실행 결과
Swift
묵시적 옵셔널에서는 컴파일러에 의해 옵셔널 객체가 자동으로 해제되었습니다. 그러면 nil을 대입하면 어떨까요?
var str: String! = nil
nil을 대입해도 문제가 없습니다. 즉 str이 옵셔널 타입으로 정의되어 있음을 의미합니다. 묵시적 옵셔널을 사용하면 옵셔널 타입 변수의 연산도 간단하게 처리할 수 있습니다.
var value01: Int? = 10
value01 + 5 // 오류
var value02: Int! = 10
value02 + 5 // 15
이처럼 묵시적 해제를 선언한 옵셔널은 일반 타입처럼 사용할 수 있어 굉장히 편리합니다. 그런데 주의해야할 점이 있습니다. 변수의 값이 nil이 될 가능성이 있다면 묵시적 옵셔널 해제를 사용하지 않아야 한다는 점입니다.
뭔가 이상합니다. 변수가 nil이 될 가능성이 있을 때 사용하는 것이 옵셔널 타입인데 nil이 될 가능성이 있으면 사용하지 말라니 말입니다.
하지만 실제로 묵시적 옵셔널이 유용하게 사용되는 경우는 클래스 또는 구조체 내에서입니다. 주로 멤버 변수를 정의할 때 선언과 초기화를 분리시키는 경우에 그렇습니다. 아직 클래스를 배우기 전이므로 지금은 이해하지 어렵지만 이후 8단원에서 자세히 배우게 됩니다.
Last updated