옵셔널(Optional)
옵셔널
- 값이 있을 수도, 없을 수도 있음
- nil의 가능성을 명시적으로 표현 가능
- nil 가능성을 문서화하지 않아도 코드만으로 충분히 표현 가능
- 문서, 주석 작성 시간을 절약
- 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않더라도 안심하고 사용 가능
- 효율적인 코딩을 할 수 있음
- 예외 상황을 최소화하는 안전한 코딩을 지향할 수 있음
옵셔널 표현
! ?
1. !(암시적 추출 옵셔널)
- none과 some 이 case를 가지고 값이 있는지 없는지 구분할 수 있음
var optionalValue: Int! = 100
switch optionalValue {
case .none: // 값이 없으면 여기에 값이 없다
print("This Optional variable in nil")
case .some(let value) // 값이 있으면 여기에 값이 들어왔다 이런 식으로 switch 구문에서 확인할 수 있음
print("Value is \(value)")
}
* 기존 변수처럼 사용 가능
optionalValue = optionalValue + 1
* nil 할당 가능
optionaValue = nil
* 잘못된 접근으로 인한 런타임 오류 발생
optionalValue = optionalValue + 1 // optionalValue에 nil 값을 넣어 줬는데 optionalValue 변수에 접근을 하려고 해서 오류 발생
2. ?
- none과 some 이 case를 가지고 값이 있는지 없는지 구분할 수 있음
var optionalValue: Int? = 100 // int 값이 들어 있을 수도 있고 없을 수도 있는 변수라고 표현
switch optionalValue {
case .none: // 값이 없으면 여기에 값이 없다
print("This Optional variable in nil")
case .some(let value) // 값이 있으면 여기에 값이 들어왔다 이런 식으로 switch 구문에서 확인할 수 있음
print("Value is \(value)")
}
* nil 할당 가능
optionaValue = nil
* 기존 변수처럼 사용 불가 - 옵셔널과 일반 값은 다른 타입이므로 연산 불가
optionalValue = optionalValue + 1