Swift
[Swift] Optinoal이란? Wrapping/Unwrapping
ji_iin
2021. 10. 2. 12:31
Optional
변수를 Optional 타입으로 사용하면 변수에 값이 있을 수도 없을 수도 있게 사용할 수 있다.
기본적으로 변수를 선언할 때 nil 값이 들어가면 안되는데
? 를 붙이면 Optional로 선언되어 nil이여도 에러가 발생하지 않는다.
사용할 때는 타입뒤에 ? 를 붙이면 Optional type으로 선언된다.
Optional 타입에 nil 값을 넣지 않아도 기본 값은 nil로 저장된다.

Wrapping
Optional 타입의 값은 기본적으로 wrap, 즉 싸여져있는 상태이다.
이 말은 Optional으로 선언된 값이 값이 있는건지 없는건지(nil) wrapping 되어 있어서 알 수 없는 상태이다.
그래서 Optional 타입으로 선언된 값을 그대로 프린트 하면 값 그대로 출력되는 것이 아니라 Optional로 감싸서 출력이된다.
그래서 Unwrapping 즉, 싸여져 있는 값을 벗겨내야된다.

Unwrapping
wrapping 된 값을 꺼내서 확인할 수 있는 5가지 방법이 있다.
1. Force Unwrapping
- Optional 선언부 = type?
- Optional 사용 = text!
let text: String? //Optional
let text2: String = text!
2. Check for nil Value
- nil 값인지 아닌지 확인
let myOptinoal: String?
myOptinoal = nil
if myOptinoal != nil{
let text: String = myOptinoal!
let text2: String = myOptinoal!
}else{
print("myOptional은 nil")
}
3. Optional Binding
- 값을 직접 건들지 않고 새 변수를 둬서 그 값이 변수랑 같은지, nil인지 확인
let myOptinoal: String?
myOptinoal = "Julia"
if let safeOptional = myOptinoal{
let text: String = safeOptional
let text2: String = safeOptional
print(safeOptional+"!!")
}else{
print("myOptional은 nil")
}
4. Nil Coalescing Operator
- 선언 : optional ?? defaultValue
let myOptinoal: String?
myOptinoal = nil
let text: String = myOptinoal ?? "default Value"
print(text) //default Value 출력
5. Optional Chaining
- 체인이 들어간 것처럼 느낌이 묶여있을 것 같은 느낌일 것인데,
- myOptional 프로퍼티들이 묶여있어 property의 타입은 옵셔널이 아니지만 접근하려고 한 myOpional이 옵셔널 타입이기 때문에 최종 값을 Opional이 된다.
//선언
optional?.property
optional?.method()
struct MyOptional {
var property = 123
func method() {
print("struct method!")
}
}
let myOptinoal: MyOptional?
myOptinoal = MyOptional()
myOptinoal?.method()