728x90
반응형
1. 옵셔널의 개념
값이 있을수도, 없을수도 있음을 표현한다.
nil이 할당될 수 있는지 없는지 여부의 표현이다.
2. 옵셔널을 쓰는 이유
- nil의 가능성을 코드만으로 표현할 수 있다.
- 문서/ 주석 작성 시간을 절약할 수 있다.
- 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않고 사용할 수 있다.
- 예외 상황을 최소화하는 안전한 코딩 기법이다.
3. 옵셔널 문법과 선언
옵셔널 문법은 enum + generics 라고 한다.
enum Optional<Wrapped>: ExpressibleByNiliteral {
case none
case some(Wrapped)
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil
나는 지금까지 자바나 코틀린을 배우면서 enum에 관한 내용은 아예 공부를 하지 않아 이게 무슨 뜻인가 했는데
옵셔널은 열거형이 기본 타입이라고 한다. 옵셔널은 값이 없거나 어떤 값이 있는 두 가지 케이스로 구성되어 있다.
그리고 let를 통해 선언한 optionalValue는 첫 줄의 Optional<Int>로 자료형을 표기한 것이 정석이지만 Int?로 작성해도 같은 의미이다.
이 ?를 사용한 표현을 보니 코틀린의 Nullable 표현과 비슷해보였다.
느낌표를 이용한 암시적 추출 옵셔널
var implicitlyUnwrappedOptinalValue: Int! = 100
switch implicitlyUnwrappedOptionalValue {
case .none:
print("This Optional Value is nil")
case .some(let value):
print("Value is \(value)")
}
// 기존 변수처럼 사용 가능
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// nil 할당 가능
implicitlyUnwrappedOptionalValue = nil
// 잘못된 접근으로 인한 에러 발생
// implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// 이전에 nil을 할당했는데 +1을 수행할 수 없기 때문
이 표현을 보며 코틀린의 !!표현이 떠오른 건 나만 그럴리 없다고 생각한다(ㅋㅋㅋ)
물음표를 이용한 옵셔널
var optionalValue: Int? = 100
switch optionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// nil 할당 가능
optionalValue = nil
// 기존 변수처럼 사용 불가 - 옵셔널과 일반 값은 다른 타입이므로 연산 불가
// optionalValue = optionalValue + 1
728x90
반응형
'Language > Swift' 카테고리의 다른 글
Swift - 클래스(Class) (0) | 2023.12.05 |
---|---|
Swift - 구조체(Struct) (0) | 2023.12.04 |
Swift - 반복문 (for-in, while, repeat-while) (0) | 2022.09.21 |
Swift - 조건문(if-else, switch) (2) | 2022.09.20 |
Swift - 함수 고급 (0) | 2022.09.17 |