[Swift] Guard Statement(Guard문)이란?

728x90

Guard Statement(Guard문)

  • Early Exit
    원하는 조건이 충족되지 않으면 불필요한 코드 실행 X , 일찍 종료해 버린다

  • Syntax

    guard condition else { //condition이 false일때 else문이 실행됨
        statements
    }
    guard optionalBiding else{
        statements
    }
    
  • 특징

    1. else문을 생략 할 수 없다.(코드를 반드시 중지 시켜야 되기 때문에)  
    2. Guard문 내에서는 코드를 중지 시켜야 된다(가드문을 호출한 Scope을 중지 시켜야된다.)  
    3. If문과 다르게 조건이 늘어날수록 코드가 조금더 깔끔해진다(중첩X)  
    4. OptionalBinding과 함께 사용 가능  
    5. 대부분 Local Scope에서 사용 Global로 사용하는 경우 거의 없다
  • 상황에 따라 if냐 guard 선택

  • 조건이 하나, 단순 -> if / 바인딩을 다른 값을 처리하는 임시값

  • 복잡한 조건 여러개 구현, 바인딩한 값을 동일한 스코프 처리 -> Guard

    코드(예시) & 설명



func validate(id: String?) -> Bool {
    //파라미터 id가 있다면 새로운 상수 id에 그 값을 저장한다
    //없다면 else 구문 실행

    guard let id = id else {
        return false //false실행하면 함수의 실행이 바로 중지 된다. 이어지는 코드 실행 X
    }

    //옵셔널 바인딩 성공했다면 이후의 코드 실행

    //id의 count가 6보다 크거나 같으면 True Guard문 다음의 코드 실행
    guard id.count >= 6 else {
        return false
    }

    //한번에 작성하는 것도 가능하다
    //    guard let id = id, id.count >= 6 else {
    //        return false
    //    }

    return true
}

validate(id: nil) //코드가 중지되었고 제어가 여기로 이동했다 라고 표현

validate(id: "abc")

validate(id: "swiftlang") //모든 condition통과 -> true

//if문과 비교
//선언한 변수의 사용 Scope주의 할 것
func validateUsingIf() {
    var id: String? = nil
    //코드가 중첩되어 가독성 떨어짐
    if let str = id {
        if str.count >= 6 {
            print(str)
        }
    }
}

func validateUsingGuard() {
    var id: String? = nil

    guard let str = id else { return } //return문으로 종료 -> Scope탈출, str은 else다음에 사용가능(논리적으로)
    guard str.count >= 6 else { return }

    print(str)
}

출처 : 어서와! Swift는 처음이지?(Programmers)
728x90

댓글

Designed by JB FACTORY