Swift/문법

옵셔널(Optional)

khon98 2021. 1. 27. 15:01

옵셔널

- 값이 있을 수도, 없을 수도 있음

- 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