학습
Swift Swift의 패턴 매칭 심화
Swift Swift의 패턴 매칭 심화 — 중급
Swift의 패턴 매칭 심화
1. 도입 (왜 배워야 하는가)
Swift의 패턴 매칭은 코드에서 조건을 간결하게 표현하고, 데이터 구조를 쉽게 다룰 수 있게 도와줍니다. 실무에서 복잡한 데이터 타입이나 상태를 다룰 때, 패턴 매칭을 이해하고 활용하는 것은 매우 중요합니다. 예를 들어, API로부터 받은 JSON 데이터를 처리할 때, 다양한 형태의 데이터를 효율적으로 분기 처리할 수 있도록 돕습니다.
패턴 매칭을 모르면 코드는 복잡해지고 가독성이 떨어지며, 디버깅이 어려워질 수 있습니다. 특히, 여러 조건을 처리해야 하는 경우, 복잡한 if-else 문이 생기고, 이는 유지보수성을 저하시킬 수 있습니다.
2. 핵심 개념 설명
패턴 매칭
패턴 매칭은 특정 값이나 데이터 구조가 특정 조건을 만족하는지를 검사하는 기법입니다. Swift에서는 switch-case 문을 사용해 다양한 데이터 타입을 간결하게 처리할 수 있습니다.
실생활 비유
패턴 매칭을 마치 '상자 안에 무엇이 들어있는지 확인하는 과정'에 비유할 수 있습니다. 각 상자는 서로 다른 물건을 담고 있으며, 우리는 상자를 열어 어떤 물건이 들어있는지 확인한 후에 알맞은 처리를 합니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 패턴 | 특정 형태를 가진 값이나 데이터 구조 |
| 매칭 | 주어진 패턴과 실제 값의 일치 여부 |
| 스위치 | 조건에 따라 분기하는 제어문 |
3. 기본 코드 예제
Swift에서 패턴 매칭의 가장 기본적인 사용법을 알아보겠습니다.
let number = 10
switch number {
case 0:
print("Zero")
case 1...5:
print("Between 1 and 5")
case 6...10:
print("Between 6 and 10")
default:
print("Greater than 10")
}
실행 결과: Between 6 and 10
코드 한 줄씩 동작 설명
let number = 10:number라는 변수를 선언하고 10을 할당합니다.switch number:number의 값을 기준으로 분기처리를 시작합니다.case 0:number가 0인지 검사합니다. (아니므로 넘어갑니다)case 1...5:number가 1에서 5 사이인지 검사합니다. (아니므로 넘어갑니다)case 6...10:number가 6에서 10 사이인지 검사합니다. (참이므로 "Between 6 and 10" 출력)default: 위의 모든 조건이 참이 아닐 경우 실행됩니다. (여기서는 해당되지 않음)- 패턴 매칭은 조건을 간결하게 표현하여 코드의 가독성을 높입니다.
- Swift의
switch문을 사용하여 다양한 데이터 타입을 효율적으로 처리할 수 있습니다. - 실생활 비유를 통해 패턴 매칭의 개념을 쉽게 이해할 수 있습니다.
- 다음 학습 주제로는 'Swift의 고차함수와 클로저'를 추천합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 구현
장바구니에 담긴 아이템의 상태를 확인해야 할 때 패턴 매칭을 활용합니다.
enum ItemStatus {
case inStock
case outOfStock
case discontinued
}
let itemStatus = ItemStatus.inStock
switch itemStatus {
case .inStock:
print("아이템이 재고에 있습니다.")
case .outOfStock:
print("아이템이 재고가 없습니다.")
case .discontinued:
print("아이템이 단종되었습니다.")
}
실행 결과: 아이템이 재고에 있습니다.
예제 2: 사용자 입력 처리
사용자가 입력한 명령어에 따라 다르게 처리할 수 있습니다.
let command = "start"
switch command {
case "start":
print("시작합니다.")
case "stop":
print("중지합니다.")
case "pause":
print("일시 정지합니다.")
default:
print("알 수 없는 명령어입니다.")
}
실행 결과: 시작합니다.
5. 흔한 실수와 주의사항
실수 1: 패턴을 잘못 정의하기
let x = 15
switch x {
case 10:
print("Ten")
case 20:
print("Twenty")
default:
print("Value is not 10 or 20")
}
잘못된 예: x가 15인데, 어떤 경우에도 해당하지 않으므로 default만 출력됩니다.
실수 2: 범위를 잘못 설정하기
let age = 25
switch age {
case 0...18:
print("아동")
case 19...30:
print("청년")
default:
print("성인")
}
올바른 예: age가 25이므로 "청년"이 출력됩니다.