• Feed
  • Explore
  • Ranking
/
/
    🦅 Swift

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

    Swiftiosifguard패턴 매칭
    지
    지성
    2025.03.18
    ·
    5 min read

    Swift에서는 패턴 매칭을 활용하여 값을 추출하는 다양한 문법을 제공한다. 그 중 if case let과 guard 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 let과 guard 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? = someValue는 someValue가 nil이 아닐 때만 실행된다. 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은 조건을 만족하지 않으면 빠져나가도록 할 수 있다.







    - 컬렉션 아티클