옵셔널 패턴(optional pattern)이란?

devapploper·2021년 2월 1일
0

스위프트 zero to hero

목록 보기
9/10

스위프트의 옵셔널은 열거형(Enum)으로 구현 되어있다.

Enum Optional<Wrapped>에는 두가지 케이스가 있는데, 하나는 값이 associated value (연관 값)로 들어있는 .some 케이스와, 다른 하나는 값이 없는 .none 케이스다. 그렇기 때문에 아래처럼 열거형 케이스 패턴을 사용해 스위치문 안에서 열거형의 케이스와 매치할 수 있다.

let number: Int? = 42
switch number {
case .some(let value):
	print("the number is \(value)")
case .none:
	print("there is no number.")
}

옵셔널 패턴은 옵셔널의 두가지 케이스 중 .some 케이스의 연관 값을 상수 또는 변수에 매칭하는 것을 말한다. 옵셔널 패턴은 식별자 패턴 뒤에 물음표를 붙이고 열거형 케이스 패턴이 있는 자리에 표기하면 된다.

//식별자 패턴 (let someOptional)
let someOptional: Int? = 42
//식별자 패턴 (let number)
let number = someOptional
//식별자 패턴 + 물음표 (let number?)
let number? = someOptional
// 열거형 케이스 패턴 if
if case .someCase = someEnum { ... }
// 열거형 케이스 패턴 if + 식별자 패턴 + 물음표
if case let number? = someOptional { ... }

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

let someOptional: Int? = 42
// 열거형 케이스 패턴
if case .some(let number) = someOptional {
	print(number) // 42
} else if case .none = someOptional {
	print("there is no number!!")
}

// 옵셔널 패턴
if case let number? = someOptional {
	print(number) // 42
} else if case .none = someOptional {
	print("there is no number!!")
}

print(someOptional) // Optional(42)

옵셔널 패턴을 통해 옵셔널에 감싸진 값을 접근할 수 있어서 이 또한 옵셔널 언래핑 방법 중 하나라고 할 수 있다.

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

let optionalIntArray: [Int?] = [1,2,nil,4,nil,6,nil,nil,9,10]

// 열거형 케이스 패턴 for + 식별자 패턴 + 물음표 = 옵셔널 패턴
for case let number? in optionalIntArray {
	print(number) 
    /*
    1
    2
    4
    6
    9
    10 */
}

// 위는 다음 열거형 케이스 패턴과 동일하다
for case .some(let number) in optionalIntArray {
	print(number)
}

옵셔널에 대한 7가지 개념

force unwrapping ✅
optional binding - if ✅
optional binding - guard ✅
nil coalescing ✅
optional chaining ✅
implicitly unwrapped optional ✅
optional pattern ✅

profile
app 을 dev 하는 developer. devapploper 입니다

0개의 댓글