study record

[Swift] 스위프트 프로그래밍 - 옵셔널 본문

Swift/스위프트 프로그래밍

[Swift] 스위프트 프로그래밍 - 옵셔널

asong 2021. 9. 17. 14:25

옵셔널은 단어 뜻 그대로 값이 있을 수도, 없을 수도 있음을 나타내는 표현이다.

옵셔널을 읽을 때, 해당 변수 또는 상수에는 값이 없을 수도 있다. 즉, 변수 또는 상수가 nil일 수 있으니 사용에 주의하라는 뜻으로 받아들일 수 있다.

옵셔널 사용

  • 옵셔널 변수 또는 상수가 아니면 nil을 할당할 수 없다.
  • 옵셔널 변수 또는 상수는 데이터타입 뒤에 물음표(?)를 붙여 표현한다.

옵셔널을 사용하는 상황

  • 오류 발생시 간단히 nil을 반환해서 오류가 있음을 알릴 수 있다.
  • 매개변수를 굳이 넘기지 않아도 된다는 뜻으로 매개변수 타입을 옵셔널로 정의할 수 있다.

옵셔널은 열거형으로 구현되어 있다.

 

 

옵셔널 추출

옵셔널의 값을 옵셔널이 아닌 값으로 추출한다.

옵셔널 강제 추출

가장 간단하지만 가장 위험한 방법이다. 런타임 오류가 발생할 가능성이 가장 높기 때문이다.

옵셔널의 값을 강제 추출하려면 옵셔널 값의 뒤에 느낌표를 붙여 값을 강제 추출하여 반환한다. 만약 값이 없다면 nil 이라면 런타임 오류가 발생한다.

이 방법은 런타임 오류의 가능성을 항상 내포하므로 지양하는 것이 좋다.

 

var myName: String? = "yagom"


// 옵셔널이 아닌 변수에는 옵셔널 값이 들어갈 수 없다. 따라서 추출해서 할당해야 한다.
var yagom: String = myName!

 

옵셔널 바인딩

옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용한다. 만약 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당하여 옵셔널이 아닌 형태로 사용할 수 있게 한다.

if 또는 while 구문과 결합하여 사용한다.

 

var myName: String? = "yagom"


// 옵셔널 바인딩을 통한 임시 변수 할당
if var name = myName {
	name = "wizplan"
	print("my name is \(name))"
} else {
	print("my name == nil")
}

 

암시적 추출 옵셔널

암시적 추출 옵셔널은 때때로 nil을 할당하고 싶지만 매번 옵셔널 바인딩으로 값을 추출하기 귀찮거나 로직상 nil때문에 런타임 오류가 발생하지 않을 것 같다는 확신이 들 때 사용한다.

암시적 추출 옵셔널을 사용하려면 타입 뒤에 느낌표(!)를 사용하면 된다.

 

옵셔널을 사용할 때는 강제 추출, 암시적 추출 옵셔널을 사용하기보다는 옵셔널 바인딩, nil 병합 연산자, 옵셔널 체이닝을 사용하는 것이 훨씬 안전하다. 스위프트의 지향점에 부합하다.