반응형
Notice
Recent Posts
Recent Comments
Link
Today
Total
07-05 05:44
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
관리 메뉴

iOS 개발 기록 블로그

iOS (Swift) Optional 이란 무엇인가? 본문

iOS

iOS (Swift) Optional 이란 무엇인가?

crazydeer 2022. 5. 17. 21:57
반응형

Swift 문서나 StackOverFlow를 보다 보면 코드에 ?가 있고 !가 있고 한데 그건 Optional 변수 때문이다.

그럼 이것은 뭘 의미하고 왜 써야하는지 알아보자

 

프로그래밍 언어는 처음에 값을 담을 수 있는 용기가 있고 그 안에 값을 할당하는데

어떠한 이유로 그 값이 손상되거나 변화된지 알 수 없다.

그래서 Optional 이라는 걸 쓴다.

많은 언어(주로 함수형 프로그래밍 언어)들에서 이 개념이 있고

한번 잘 정리해두면 스위프트 뿐만 아니라 Kotlin에서도 도움이 된다.

 

Optional Example

nil이라는 값을 할당시켜주어 player1Username과 player2Username 용기를 빈 용기로 만들려고 한다.

그런데 위의 코드는 nil 값을 줄 수 없다.

 

Optional 변수 출력 이미지

아무 값을 넣어주고 출력해보면 하단에 콘솔창처럼 Optional("crazydeer")라고 나온다.

변수 뒤에 ! 를 붙여주면 Optional()이 아닌 본연의 값 그대로 출력되는 걸 볼 수 있다.

 

nil 에러

 

Optional이라는 건 결국 nil (아무것도 없는, 0이랑은 다름)이라는 값을 가질 수 있는지 체크하는

안전장치인 것이다.

 

에러 해결 이미지

위처럼 nil이 아니면 출력하라고 했기 때문에 에러는 잡혔고 ?를 붙여주는 Optional 변수는

안전장치인 것이다.

확실하지 않으면 우리가 직접 체크해줘서 앱이 충돌나는 것을 사전에 예방하기 위함인 것이다.

그니까 그 변수가 비어있는지 뭔가 있는지 모를때 쓰는 것으로

어떤 것이 있거나 또는 아무 것도 없는 용기(Container)를 나타낸다.

 

Optional String (String?)과 String은 엄연히 다른 타입이다.

Swift라는 언어는 모호함을 싫어하기 때문에

nil이 들어갈 수 있으면 Optional String으로 만들고

nil이 있는지도 분명하게 체크하게 한다.

 

Objective-C 언어는 모든 객체가 nil일 수 있다.

그에 반면, Swift는 값이 누락될 수 있는 시점과 존재가 보장되는 시점에 대해 명확하게 해야 한다.

 

사용하기 위해서는 위에서 했던 것 처럼 ! 를 붙여주어 unwrap 해줘야 한다.

 

Optional Example 2

위처럼 nil인지 체크해서 쓰는 방법도 있지만 일반적으로 이렇게 쓰지 않는다.

일반적으로는 'Optional Binding' 이라는 개념을 쓴다.

 

Optional Binding

Optional Binding 예시 이미지

x라는 Optional 변수를 만들어주고 10을 

if let을 사용하여 위와 같이 nil인지 아닌지 체크하는 문법을 많이 쓴다.

 

 

Implicity Unwrapped Optional 

Implicity Unwrapped Optional Exam 1

지금까지 본걸 다시 실행해보면 위처럼 결과가 나올 것이다.

 

Implicity Unwrapped Optional Exam 2

데이터 타입을 명시한 뒤에 ?가 아닌 !를 붙이면 Implicity Unwrapped Optional 타입으로 만들어지는데

말 그대로 Optional로 사용되지 않을때는 암묵적으로 Swift 내부적으로 강제로 Unwrap 해준다.

 

 

 

참고: https://stackoverflow.com/questions/24003642/what-is-an-optional-value-in-swift#

 

What is an optional value in Swift?

From Apple's documentation: You can use if and let together to work with values that might be missing. These values are represented as optionals. An optional value either contains a value or con...

stackoverflow.com

참고 동영상: https://www.youtube.com/watch?v=P1pot_tolE8&t=34 

Optional 개념 유튜브 영상

 

반응형