본문 바로가기
IOS App Programming/Swift

[Swift] 옵셔널 - 옵셔널이란?, 옵셔널 추출

by B_Tori 2023. 3. 15.

옵셔널(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을 할당하면 오류가 발생하게 된다.

 

댓글