GGURUPiOS

[Swift] Optional 이란 무엇일까? 본문

Swift/문법 파헤치기

[Swift] Optional 이란 무엇일까?

꾸럽 2023. 11. 1. 22:33

안녕하세요.

Swift의 Optional 타입은 type-safe 를 보장하도록 설계되었지만, 우리에겐 혼란을 줍니다..

이번시간에는 Optional에 대해 알아보도록 하겠습니다.

 


 

Optional이란?

Optional이란 선택적 타입으로 값이 있고, 그것은 x와 같습니다 or 값이 전혀 없습니다 라고 말하는 타입입니다.

간단히 말하면, 값이 있거나 값이 전혀 없는 상태를 나타낼 수 있는 타입이라고 생각하면 될 것 같습니다.

 

일단 Optional타입은 열거형입니다.

 

결국 값이 없는 none(옵셔널 바인딩할 경우 nil을 뱉음)

그리고 값을 가지고 있는 some 으로 이루어져 있다고 보면 됩니다.

 

Swift는 type-safe 언어로, 코드에서 사용할 수 있는 값의 타입을 명확하게 파악할 수 있습니다.

즉 문자열이 필요한 경우 Int를 전달하지 못하도록 방지합니다.

이런것과 마찬가지로 Optional 문자열이 아닌 문자열이 필요한 코드에 Optional 문자열을 실수로 전달하는 것을 방지합니다.

= Optional을 벗기고 사용해야 하므로, String이 필요한 곳엔 Optional<String>이 아닌 String만 쓰도록 해서 타입 안정성을 지킴

 

-> 컴파일 시에 타입이 다르면 오류를 뱉기에 가능한 한 빨리 오류를 발견하고 수정하는 데 도움이 됨 

 

Optional Binding

결국 String인 곳에는 String? 이 아니라 String을 써야한다는 말인데,

그렇다면 옵셔널을 어떻게 풀까요?

 

아래와 같이 네가지 방법으로 풀 수 있습니다.

주의할 점은 강제언래핑의 경우에는 런타임 에러를 발생시키므로(앱이꺼짐) 각별한 주의를 요합니다! 

var someName: String? = "민수"

// if let 으로 풀기
if let name = someName {
	print(name)
}

// guard let 구문으로 풀기
guard let name = someName else { fatalError("someName was invalid") }
// 보통 함수안에 가드렛을 쓰면 else 문에는 return 을 시킵니다


// 강제 언래핑
print(someName!)


// Nil-Coalescing 연산자를 통한 기본값 부여
print(someName ?? "철수")

 

 


출처

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics

 

Documentation

 

docs.swift.org