본문 바로가기
카테고리 없음

12. 패턴 매칭(Pattern Matching)의 활용

by swifttt 2025. 4. 2.

 

Swift에서 패턴 매칭(Pattern Matching)은 단순한 switch 구문을 넘어서 다양한 형태의 값을 비교하고 구조를 해체할 수 있는 강력한 기능입니다.
일반적인 조건문이나 반복문에서도 패턴 매칭을 활용할 수 있으며, 열거형, 튜플, 옵셔널 등과 함께 자주 사용됩니다.

Swift의 패턴 매칭은 가독성을 높이고, 조건 분기와 데이터 추출을 더 직관적으로 처리할 수 있게 도와줍니다.

1. switch문과 패턴 매칭

let point = (2, 0)

switch point {
case (0, 0):
    print("원점입니다.")
case (_, 0):
    print("x축 위에 있습니다.")
case (0, _):
    print("y축 위에 있습니다.")
default:
    print("좌표: \(point.0), \(point.1)")
}

_는 와일드카드 패턴으로, 특정 값을 무시할 때 사용됩니다.

2. 값 바인딩(Value Binding)

let somePoint = (3, 5)

switch somePoint {
case let (x, 0):
    print("x축에 위치: \(x)")
case let (0, y):
    print("y축에 위치: \(y)")
case let (x, y):
    print("좌표는 (\(x), \(y))입니다.")
}

이 방식은 튜플이나 열거형의 내부 값을 분리해서 사용할 때 매우 유용합니다.

3. where절을 이용한 조건 추가

let num = 6

switch num {
case let x where x % 2 == 0:
    print("짝수입니다.")
default:
    print("홀수입니다.")
}

where절을 이용하면 조건문과 패턴 매칭을 유연하게 결합할 수 있습니다.

4. 열거형과 패턴 매칭

enum DeliveryStatus {
    case shipped(String)
    case pending
    case failed(String)
}

let status = DeliveryStatus.shipped("2025-04-01")

switch status {
case .shipped(let date):
    print("배송됨: \(date)")
case .pending:
    print("배송 대기 중입니다.")
case .failed(let reason):
    print("배송 실패: \(reason)")
}

열거형 케이스에 따라 내부 값을 추출하고, 조건을 분기할 수 있습니다.

5. 옵셔널과 if case, while case

let nickname: String? = "코코"

if case let .some(name) = nickname {
    print("닉네임: \(name)")
}

이 구문은 if let보다 패턴을 명확하게 드러내는 장점이 있습니다.

let numbers: [Int?] = [1, nil, 3, nil, 5]

for case let number? in numbers {
    print("숫자: \(number)")
}

옵셔널 중 값이 있는 항목만 골라내어 사용할 수 있습니다.

6. guard case 구문

let token: String? = "abc123"

func validate(token: String?) {
    guard case let .some(value) = token else {
        print("토큰이 없습니다.")
        return
    }
    print("유효한 토큰: \(value)")
}

이 방식은 guard let과 유사하지만, 패턴 매칭의 유연성을 그대로 유지할 수 있다는 장점이 있습니다.

마무리

Swift의 패턴 매칭은 단순한 조건 분기를 넘어, 값의 구조 해체, 조건 필터링, 데이터 추출 등 다양한 상황에서 매우 유용하게 사용됩니다.
튜플, 열거형, 옵셔널뿐 아니라 반복문이나 조건문에서도 자연스럽게 적용할 수 있으며, 코드의 가독성과 간결성을 크게 향상시킵니다.