옵셔널 언래핑
- 옵셔널 타입은 값이 없을수도 있는 경우를 안전하게 처리하기 위해 사용되지만,
값에 접근하면 Optional(값) 으로 래핑되어 있어서 바로 사용하지 못하는 불편함이 있습니다.
따라서 이 옵셔널로 래핑된 값에서 옵셔널을 제거하고 값으로 변환하는 과정을
옵셔널 언래핑 이라고 부르며, 몇가지 방법으로 이를 수행할 수 있습니다.
옵셔널 바인딩 (Optional Binding)
- 조건문
if , guard 구문을 사용하여 안전하게 옵셔널을 언래핑하는 방법입니다.
if let
if let 을 사용하여 옵셔널 바인딩을 할 수 있습니다..
- 값이 있다면
if let 코드블록이 실행되고, 이 블록 안에서 언래핑 된 값을 사용할 수 있습니다.
- 값이 없을 때 작업을 하고 싶다면
else 코드블록을 작성하면 됩니다.
var intValue: Int? = 10
if let intValue = intValue {
print(intValue)
}
print(intValue)
var optionalValue: String?
if let optionalValue = optionalValue {
print(optionalValue)
} else {
print("optionalValue 값은 nil 입니다.")
}
guard let
guard let 구문은 옵셔널 바인딩 결과가 nil일 경우,
해당 코드 블록을 빠져나가게 하여 이후 코드가 실행되지 않도록 합니다.
- 클로저나 메소드 내부에서 주로 사용됩니다.
- 코드의 가독성을 높이고, 중첩된 조건문을 피할 수 있습니다.
func guardLetFunction() {
var optionalValue: String?
guard let optionalValue = optionalValue else {
print("guard 실행")
return
}
print(optionalValue)
}
guardLetFunction()
func guardLetFunction() {
var optionalValue: String? = "Hello"
guard let optionalValue = optionalValue else {
print("guard 실행")
return
}
print(optionalValue)
}
guardLetFunction()
- Nil-결합 연산자(Nil-Coalescing Operator) 방법을 사용하는 방법입니다.
- 옵셔널 값 뒤에
?? 를 붙인 후 기본값을 제공할 수 있습니다.
- 옵셔널 값이
nil이면 ?? 뒤에있는 기본 값을 사용합니다.
let name: String? = nil
print(name ?? "Default Name")
let greeting = "안녕하세요 \(name ?? "A")님!"
print(greeting)
옵셔널 강제 언래핑(force unwrapping)
- 옵셔널 값에
! 를 붙여서 사용합니다.
nil이 아니라면 언래핑이 되지만 nil이면 런타임오류를 발생시킵니다!
nil 이 아님을 확신할 때 사용합니다.
var name: String? = "Brody"
print(name!)
name = nil
print(name!)
옵셔널 묵시적 언래핑(Implicitly Unwrapped Optional)
- 옵셔널 타입을 선언할 때
?가 아닌 !를 사용하면 묵시적 언래핑 되는 옵셔널로 정의할 수 있습니다.
- 값을 사용할 때 자동으로 언래핑되어, 별도의 언래핑 작업 없이 직접 사용할 수 있습니다.
- 값이
nil 일 때 접근하면 런타임 오류가 발생합니다.
- 값이 있다고 확신이 들 때 사용해야 합니다.
- 옵셔널 바인딩이 가능합니다.
var name: String! = "Brody"
print(name)
print(name.count)
if let name = name {
print(name)
}