-
[Apple Dev Reference - Swift] Implicitly Unwrapped Optionals앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 5. 15. 01:57
<?!>
Implicitly Unwrapped Optionals
아시겠지만 옵셔널이란 "no value"를 나타낼 수 있는 타입입니다. 옵셔널은 if문을 통해서 변수에 값이 있는지를 체크하고 옵셔널 바인딩을 통해 값을 해제하여 사용할 수 있습니다. 하지만 가끔은 데이터의 구조상 '항상' 값을 갖는 옵셔널이 있을 수 있습니다. 이런 경우에는 옵셔널을 언래핑할때 굳이 nil체크를 할 필요가 없겠죠. 항상 값을 갖고 있으니 언래핑이 안전하게 될 것입니다.
이런 종류의 옵셔널을 implicitly unwrapped optional이라고 합니다. implicitly unwrapped optional을 선언할 때는 타입에 물음표(String?)가 아닌 느낌표(String!)를 붙여주어야 합니다.
implicitly unwrapped optional는 처음 초기화된 이후로는 항상 값을 갖고 있다는 것이 보장될 때 유용하게 사용할 수 있습니다. Swift에서 implicitly unwrapped optional는 클래스 타입에 주로 사용됩니다.(참고:Unowned References and Implicitly Unwrapped Optional Properties)
implicitly unwrapped optional는 옵셔널의 성격을 갖지만 언래핑할 때 값의 nil체크를 할 필요가 없기 때문에 nonoptional 값처럼 사용할 수도 있습니다. 아래의 예제는 옵셔널String과 implicitly unwrapped optional인 String의 차이점을 보여주고 있습니다.
implicitly unwrapped optional를 사용한다는 건 옵셔널이 사용될 때마다 자동으로 언래핑되도록 설정한다고 생각하시면 될 것 같네요. 옵셔널을 사용할 때마다 변수명에 느낌표를 붙여서 사용하는 것보다 선언할 때 한번 느낌표를 붙여주는거죠!
Note : implicitly unwrapped optional이 nil인데 이 옵셔널을 언래핑하면 당연히 런타임에러가 발생합니다. 이는 nil을 갖는 일반 옵셔널을 해제하는 것과 같은 결과입니다.
implicitly unwrapped optional을 일반 옵셔널처럼 값을 갖는지 체크하여 사용해도 무방합니다.
implicitly unwrapped optional을 let바인딩으로 사용해도 무방합니다.
Note : 옵셔널이 nil일 가능성이 있는 경우에는 그냥 implicitly unwrapped optional을 사용하지 않는 걸 권장합니다.
'앱등이에게 살충제를 뿌린다. > Apple Dev Reference' 카테고리의 다른 글
[Apple Dev Reference - Swift] Strong Reference Cycles for Closures (0) 2016.05.15 [Apple Dev Reference - Swift] ARC & Strong Reference Cycle (1) 2016.05.15 [Apple Dev Reference - Swift] Trailing Closures 클로져를 파라미터로 간단히 사용하기 (0) 2016.04.26 [Apple Dev Reference - Swift] Generics (of Swift2.2) (0) 2016.04.24 [Apple Dev Reference] Apple Push Notification Service (0) 2016.04.03