optional을 쉽게 설명해보자.

물음표 뜻 그대로 '없을 수도 있어’라는 뜻이다.

Objective-C에서는 값이 없으면 nil을 return하는 방식으로 이를 구현했는데 이는 NSObject를 상속한 개체만 가능했기 때문에 한계가 있었다. structure, enum 등까지 모두 포함해 ‘값이 없음’을 표현하게 위해 optional이 도입됐다.

만약 var number: Int?라고 선언하게 된다면 number는 nil 상태로 초기화된다.

이렇게 선언한 number를 그냥 쓰게 되면 값이 있을 수도 있고 없을 수도 있기 때문에 컴파일 에러가 발생한다. xCode는 느낌표를 쓸 거냐고 물어본다. 이는 force unwrapping인데 값이 무조건 있다고 가정하고 넘어가자는 것이다.

만약 값이 없으면 크래쉬가 발생하기에 위험하다. 이를 막기 위해 optional binding을 쓴다.

if let actualNumber = Int(possibleNumber) {
     "print("\"\(possibleNumber)\" has an integer value of \(actualNumber)”)"
}

이는 "만약 Int(possibleNumber)가 반환한 Int가 값을 가지고 있으면 이를 새로운 변수인 actualNumber에 할당해라"는 뜻이다.

guard let을 사용할 수도 있다.

guard let rowCount = branch?.services?.count else {
     return 0
}

guard는 if와 비슷하다. 조건 구문의 boolean 값에 따라 statements가 실행된다. 다른 점은 늘 else가 있다는 것이다.

if와 달리 예외 처리에 주로 사용된다.

-

optional에 대해 한번 정리하는 차원에서 글을 썼다. 사실 앱 개발을 공부하는데 있어서 모든 레퍼런스는 집어 치우고 공식 문서만 보면 된다(고 고수들이 그랬다).

'공식 문서를 보면 되는데 왜 나는 쓰고 있지?'란 생각이 가끔 들었다. 사실 나는 학습에 외국어보단 모국어가, 글보단 영상이 효과적이라고 생각한다. 요즘엔 멍 때리면서 tryhelloworld 보는 게 낙이다. 

이건 공식 문서와 달리 한글로 쓰여있기 때문에 1g의 의의를 지닐 수 있을 것이다.


'Tech > iOS' 카테고리의 다른 글

스위프트 타입 호환성  (0) 2017.01.11
[Swift] Class와 Struct 중에 뭘 쓸까?  (0) 2016.10.28
@noscape, @autoclosure  (0) 2016.10.24
Hashable Protocol  (0) 2016.02.28

+ Recent posts