옵셔널(Optional)이란?
Optional은 값이 있을 수도 있고, 없을 수도 있음을 의미한다.
옵셔널이 아닌 값에 nil을 할당할 수 없는데, 이때 nil을 사용하기 위해서는 옵셔널을 사용해야 한다.
옵셔널 사용 이유
- nil이 있을 수도 있다는 가능성을 명시적으로 표현
- 안전성을 높여줌
- 전달값이 옵셔널이 아니라면 nil체크 불필요
- 예외 상황을 최소화하는 안전한 코딩
옵셔널 선언 방법
일반적으로 물음표(?)를 붙여 옵셔널을 선언하지만 옵셔널의 명확한 표현 방법은 Optional <타입>이다.
var name:String?
var name:Optional<String>
두 선언 모두 사용가능하며 같은 뜻을 가진다.
이렇게 옵셔널로 선언한 변수에는 nil을 할당할 수 있게 된다.
하지만 옵셔널을 기존 변수처럼 연산을 하려 하면 오류가 발생한다.
이를 해결하기 위해서는 옵셔널을 추출해서 할당한 뒤 사용해줘야 한다.
옵셔널 추출
옵셔널 추출에는 1. 옵셔널 바인딩, 2. 강제 추출 두 가지 방법이 있다.
옵셔널 바인딩 (Optional Binding)
옵셔널 바인딩이란 nil인지 아닌지 체크 후 nil이 아니라면 값을 추출하는 방법을 말한다.
옵셔널에 값이 있다면 임시 상수(변수)에 할당 후 일정 블록 안에서 해당 값을 옵셔널이 아닌 형태로 사용가능하게 한다.
첫 번째 바인딩을 보면 임시변수 num에 옵셔널 변수인 number를 할당하여 if 블록 안에서 기본 변수처럼 연산 등을 자유롭게 실행하였다.
두 번째 바인딩은 여러 옵셔널 값을 추출하는 모습이다. 둘 중하나라도 nil값이 있다면 실행되지 않는다.
이처럼 할당된 옵셔널 값은 if블록 안에서만 사용이 가능하고 블록 밖 혹은 else문에서도 사용이 불가하다.
강제 추출
강제 추출이란 말 그대로 옵셔널 값을 강제로 추출하는 것을 의미한다.
옵셔널 뒤에 느낌표(!)를 붙여주면 강제로 값을 추출하여 반환한다. 만약 이때 추출한 값이 없다면(nil이라면) 런타임 오류가 발생한다.
첫 번째 할당은 nil이 아니어서 가능하였지만 두 번째에서 name에 nil을 할당한 뒤 n에 name을 할당하면 오류가 발생하게 된다.
'IOS App Programming > Swift' 카테고리의 다른 글
[Swift] 클로저 - 클로저란?, 후행 클로저, 클로저 표현 간소화 (0) | 2023.03.20 |
---|---|
[Swift] 열거형 기본 - 열거형이란?, 원시값 (0) | 2023.03.15 |
[Swift] 함수 사용법 - 기본 함수 사용, 매개 변수 기본값, 전달 인자 레이블 (0) | 2023.03.14 |
[Swift] 기본 자료형 (0) | 2022.11.14 |
[Swift] Swift 기본 - 명명규칙, 콘솔 출력, 주석, 변수와 상수 (0) | 2022.11.01 |
댓글