- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cocoapods
- ios
- sigmoid
- Request
- MVC
- SWIFT
- 연산자
- rest api
- Linux
- Python
- 시각화
- r
- HTTP
- 티스토리챌린지
- 명령어
- scheduledTimer
- 딥러닝
- ReLU
- Optional
- deeplearning
- SQL
- swiftUI
- tapply
- decode
- substr
- 오블완
- rxswift
- Observable
- struct
- barplot
iOS 개발 기록 블로그
iOS (Swift) Optional 이란 무엇인가? 본문
Swift 문서나 StackOverFlow를 보다 보면 코드에 ?가 있고 !가 있고 한데 그건 Optional 변수 때문이다.
그럼 이것은 뭘 의미하고 왜 써야하는지 알아보자
프로그래밍 언어는 처음에 값을 담을 수 있는 용기가 있고 그 안에 값을 할당하는데
어떠한 이유로 그 값이 손상되거나 변화된지 알 수 없다.
그래서 Optional 이라는 걸 쓴다.
많은 언어(주로 함수형 프로그래밍 언어)들에서 이 개념이 있고
한번 잘 정리해두면 스위프트 뿐만 아니라 Kotlin에서도 도움이 된다.
nil이라는 값을 할당시켜주어 player1Username과 player2Username 용기를 빈 용기로 만들려고 한다.
그런데 위의 코드는 nil 값을 줄 수 없다.
아무 값을 넣어주고 출력해보면 하단에 콘솔창처럼 Optional("crazydeer")라고 나온다.
변수 뒤에 ! 를 붙여주면 Optional()이 아닌 본연의 값 그대로 출력되는 걸 볼 수 있다.
Optional이라는 건 결국 nil (아무것도 없는, 0이랑은 다름)이라는 값을 가질 수 있는지 체크하는
안전장치인 것이다.
위처럼 nil이 아니면 출력하라고 했기 때문에 에러는 잡혔고 ?를 붙여주는 Optional 변수는
안전장치인 것이다.
확실하지 않으면 우리가 직접 체크해줘서 앱이 충돌나는 것을 사전에 예방하기 위함인 것이다.
그니까 그 변수가 비어있는지 뭔가 있는지 모를때 쓰는 것으로
어떤 것이 있거나 또는 아무 것도 없는 용기(Container)를 나타낸다.
Optional String (String?)과 String은 엄연히 다른 타입이다.
Swift라는 언어는 모호함을 싫어하기 때문에
nil이 들어갈 수 있으면 Optional String으로 만들고
nil이 있는지도 분명하게 체크하게 한다.
Objective-C 언어는 모든 객체가 nil일 수 있다.
그에 반면, Swift는 값이 누락될 수 있는 시점과 존재가 보장되는 시점에 대해 명확하게 해야 한다.
사용하기 위해서는 위에서 했던 것 처럼 ! 를 붙여주어 unwrap 해줘야 한다.
위처럼 nil인지 체크해서 쓰는 방법도 있지만 일반적으로 이렇게 쓰지 않는다.
일반적으로는 'Optional Binding' 이라는 개념을 쓴다.
Optional Binding
x라는 Optional 변수를 만들어주고 10을
if let을 사용하여 위와 같이 nil인지 아닌지 체크하는 문법을 많이 쓴다.
Implicity Unwrapped Optional
지금까지 본걸 다시 실행해보면 위처럼 결과가 나올 것이다.
데이터 타입을 명시한 뒤에 ?가 아닌 !를 붙이면 Implicity Unwrapped Optional 타입으로 만들어지는데
말 그대로 Optional로 사용되지 않을때는 암묵적으로 Swift 내부적으로 강제로 Unwrap 해준다.
참고: https://stackoverflow.com/questions/24003642/what-is-an-optional-value-in-swift#
참고 동영상: https://www.youtube.com/watch?v=P1pot_tolE8&t=34
'iOS' 카테고리의 다른 글
iOS(Swift) Progress Bar 사용법 (0) | 2022.05.19 |
---|---|
iOS(Swift) Timer Code (타이머 코드 개요, 이슈, 해결, 추가) (0) | 2022.05.18 |
iOS(Swift) var와 let의 차이, 쓰는 이유 (0) | 2022.05.08 |
How to skill up your programming (프로그래밍 잘 하는 방법) (0) | 2022.05.06 |
iOS 앱 아이콘 다양한 크기로 한번에 생성해서 적용하기 (0) | 2022.05.05 |