Optional 이란 ?
: 값이 있을 수도 있고, 없을 수도 있다
Optional 필요한 이유
: nil의 가능성을 명시적으로 표현하기 위해 필요
nil 가능성을 문서화 하지 않아도 코드만으로 충분히 표현 가능
→ 문서 / 주석 작성 시간 절약
전달 받은 값이 옵셔널이 아니라면 nil 체크를 하지 않더라도 안심하고 사용 가능
→ 효율적인 코딩 & 예외 상황을 최소화하는 안전한 코딩
Optional 타입 (enum + general)
enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil
❗️Implicitly Unwrapped Optional
var optionalValue: Int! = 100
// 기존 변수처럼 사용 가능
optionalValue = optionalValue + 1
// nil 할당 가능
optionalValue = nil
// 잘못된 접근으로 인한 런타임 오류 발생
optionalValue = optionalValue + 1
❓Optional
var optionalValue: Int? = 100
// nil 할당 가능
optionalValue = nil
// 기존 변수처럼 사용 불가 - 옵셔널과 일반 값은 다른 타입으므로 연산 불가
optionalValue = optionalValue + 1
Optional Unwrapping
✅ Optional Binding (옵셔널 바인딩): nil 체크 + 안전한 값 추출 안전한 방법
func printName(_ name: String) {
print(name)
}
var myName: String? = nil
if let name: String = myName {
printName(name)
} else {
print("myName == nil")
}
Force Unwrapping ( 강제 추출 ) : 옵셔널의 값을 강제로 추출
func printName(_ name: String) {
print(name)
}
var myName: String? = "영인"
printName(myName!) // 영인
func printName(_ name: String) {
print(name)
}
var myName: String! = nil
printName(myName!) // nil값이 전달되기 때문에 오류 발생
참고 사이트
https://youtu.be/RxScvfe1dyU