본문 바로가기
iOS/Swift

[Swift] 옵셔널 패턴(Optional Pattern)

by Dani K 2022. 9. 28.

 

옵셔널 타입(Optional Type)이 실제로 어떻게 구현되어 있는지 내부를 들여다보자.

 

옵셔널은 Enum(열거형) 타입으로 구현되어 있고, 두 가지 케이스를 가지고 있다. 

값이 associated value 로 들어있는 some 케이스와, 값이 없는 none 케이스가 있다.

또한 Generic으로 선언되어 있어 Int, String 등 어떤 타입이든 가질 수 있다.

 

enum Optional<Wrapped> {
  case some(Wrapped)
  case none // nil
}

 

열거형 케이스 패턴(Enumeration Case Pattern)

옵셔널 자체가 열거형이기 때문에 옵셔널은 아래와 같이 switch 구문을 통해 값이 있고 없음을 확인할 수 있다.

 

let num: Int? = 10
switch num {
case .some(let value):
	print("number is \(value)")
case .none:
	print("nil")
}

 

옵셔널 패턴(Optional Pattern)

옵셔널 패턴은 옵셔널의 두 가지 케이스 중 some 케이스의 연관 값을 상수 또는 변수에 매칭하는 것을 말한다.

옵셔널 패턴은 식별자 패턴 뒤에 물음표(?)를 붙이고 열거형 케이스 패턴이 있는 자리에 표기하면 된다.

 

let num: Int? = 10
switch num {
case let value?:
	print("number is \(value)")
case nil:
	print("nil")
}

 

 

옵셔널 패턴은 열거형 케이스 패턴의 syntatic sugar로 다음 두 가지는 동일하다.

 

// 열거형 케이스 패턴
if case .some(let value) = num {
	print(value)
} 

// 옵셔널 패턴
if case let value? = num {
	print(value) // 42
}

 

 

특히 옵셔널 타입을 포함하는 배열에서 반복문을 사용하는 경우 옵셔널 패턴을 사용하면 편리하다.

옵셔널 타입이 들어있는 배열의 요소 중 nil이 아닌 값만 순회하고 싶다면 다음과 같이 옵셔널 패턴을 활용할 수 있다.

 

let arrays: [Int?] = [1, 2, nil, 4, nil]

// 열거형 케이스 패턴
for case .some(let number) in arrays {
	print(number)
}

// 옵셔널 패턴
for case let number? in arrays {
	print(number) 
}

 

 

'iOS > Swift' 카테고리의 다른 글

[Swift] Copy-on-Write(CoW) 알아보기  (0) 2022.10.02
[Swift] Class와 Struct의 차이  (0) 2022.09.29
[Swift] 옵셔널 바인딩(Optional Binding)  (0) 2021.11.24

댓글