
옵셔널(Optional)이란?
값이 포장되어(감싸져, 숨겨져) 있거나 값이 없음을 나타내는 타입
개발 시 값이 할당되어 있지 않은 변수에 접근했을때, 에러가 발생하고 이는 앱의 종료를 야기하기 때문에 치명적일 수 있다.
하지만 변수를 옵셔널 타입으로 선언한다면, 이러한 에러 발생을 방지할 수 있다.
즉, 에러가 발생하지 않도록 임시적인 타입을 변수에 담아두는 개념이다.
임시값은 값이 있는 경우(Optional(값))와 값이 없는 경우(nil)로 나뉘고, 값이 있는 경우, 언래핑을 해야 해당 값을 사용할 수 있다.
값이 없는 경우를 한 번 걸러준다고 생각할 수 있다.
nil이 실제 값이 없는 건 맞지만, 옵셔널 nil은 값이 없음을 의미하는 값이다.
선언 방법과 특징
값을 대입하지 않는 경우는 자동으로 nil로 초기화 된다.
nil로 초기화하는 경우, 타입 추론이 불가능하기 때문에 반드시 타입 어노테이션을 사용해야 한다.
스위프트에서는 읽고 쓰기에 편리한 간편 표기법을 더 권장한다.
// 1. 간편 표기법
let shortForm: Int? = 5
// 2. 정식 표기법
let longForm: Optional<Int> = 5
옵셔널 타입이 아닌 변수에 nil을 할당하면 에러 발생
nil 값은 옵셔널 타입의 변수에만 할당 가능
주의: 옵셔널 타입에 nil을 할당하고 싶다면 반드시 상수가 아닌 변수에 할당해 주어야 한다.
상수로 선언한다면 nil 값 상태에서 또 다른 값을 대입하여 사용하기가 어렵기 때문에 변수를 사용하는 것이 바람직하다.
// 'nil' requires a contextual type
var test = nil
// 'nil' cannot initialize specified type 'Int'
var test: Int = nil
옵셔널 값을 복사해 다른 변수에 담아도 그대로 옵셔널
일반 타입을 옵셔널 변수에 복사한 결과 역시 옵셔널
// 옵셔널 정수 a
var a: Int? = 7
// a의 값을 복사해서 b에 담는다면 --> b 역시 옵셔널 정수
var b = a
print(b) // Optional(7)
var c: Int = 5
b = c
print(b) // Optional(5)
옵셔널 타입 간의 연산은 불가능하다.(감싸져있는 값이기 때문, 연산을 위해선 언래핑 필요)
'IOS > Swift' 카테고리의 다른 글
| 열거형(Enumerations) (0) | 2023.05.24 |
|---|