[Swift] 패턴 매칭을 활용한 제어문 - if case let, guard case let

Swiftiosifguard패턴 매칭
avatar
2025.03.18
·
5 min read

Swift에서는 패턴 매칭을 활용하여 값을 추출하는 다양한 문법을 제공한다. 그 중 if case letguard case let은 특정 패턴과 일치하는 경우 값을 바인딩하는 데 유용하다. 이 글에서는 두 문법의 차이점과 사용법을 정리한다.

if case let 문법

if case let은 특정 패턴과 값이 일치할 때만 실행되는 조건문으로, switch 문을 사용하지 않고도 패턴 매칭을 수행할 수 있다.

if case 패턴 = 값 {
    // 패턴이 일치하는 경우 실행되는 코드
}
enum Status {
    case success(code: Int)
    case failure(message: String)
}

let result = Status.success(code: 200)

if case let .success(code) = result {
    print("요청 성공, 응답 코드: \(code)")
} else {
    print("요청 실패")
}
// 출력: 요청 성공, 응답 코드: 200

guard case let 문법

guard case let은 특정 패턴과 일치하지 않으면 즉시 함수에서 빠져나가는(early exit) 방식으로 사용된다. 이를 통해 코드 흐름을 단순하게 만들 수 있다.

guard case 패턴 = 값 else {
    // 패턴이 일치하지 않는 경우 실행되는 코드 (early exit)
    return
}

// 이후 코드 실행 (패턴이 일치하는 경우만)
func handleResult(_ result: Status) {
    guard case let .success(code) = result else {
        print("요청 실패")
        return
    }
    
    print("요청 성공, 응답 코드: \(code)")
}

let result = Status.success(code: 200)
handleResult(result)
// 출력: 요청 성공, 응답 코드: 200

let failedResult = Status.failure(message: "Not Found")
handleResult(failedResult)
// 출력: 요청 실패

if case let vs guard case let 비교

비교 항목

if case let

guard case let

사용 목적

특정 패턴과 일치하는 경우 실행

특정 패턴과 일치하지 않으면 early exit

제어 흐름

일반적인 if 문처럼 동작

guard 문처럼 빠른 종료

실행 범위

{} 내부에서만 사용 가능

guard 이후에도 변수 사용 가능

옵셔널 값과 함께 사용하기

if case letguard case let은 옵셔널 값이 특정 패턴을 만족하는지 검사하는 데도 사용 가능하다.

let someValue: Int? = 42

if case let value? = someValue {
    print("옵셔널 해제된 값: \(value)")
}

guard case let value? = someValue else {
    fatalError("값이 없음")
}

print("옵셔널 해제된 값: \(value)")

if case let value? = someValuesomeValuenil이 아닐 때만 실행된다. guard case let을 사용하면 nil인 경우 바로 종료되므로 안전한 처리가 가능하다.

여러개의 패턴 매칭 (튜플 활용)

튜플과 함께 사용하면 더 강력한 패턴 매칭이 가능하다.

let person = ("춘장", 25)

if case let (name, age) = person, age > 20 {
    print("\(name)은 성인입니다.")
}
// 출력: 춘장은 성인입니다.

func checkPerson(_ person: (String, Int)) {
    guard case let (name, age) = person, age > 20 else {
        print("미성년자입니다.")
        return
    }
    print("\(name)은 성인입니다.")
}

checkPerson(("메주", 17))
// 출력: 미성년자입니다.

튜플 패턴을 활용하면 여러 값을 한 번에 추출하고 조건을 추가할 수 있다. if case let은 특정 조건을 만족할 때 실행하고, guard case let은 조건을 만족하지 않으면 빠져나가도록 할 수 있다.







- 컬렉션 아티클