4.2.2 guard 구문

guard 구문은 if 구문과 마찬가지로 주어진 표현식의 결과가 참인지 거짓인지에 따라 구문의 실행 여부를 결정짓는 방식의 조건문입니다. if 구문과의 차이점은 guard 구문에는 else 블록이 필수이지만, 표현식의 결과가 참일 때 실행되는 블록이 없다는 점입니다.

guard <조건식 또는 표현식> else {
    <조건식 또는 표현식의 결과가 false 일 때 실행 될 코드>
}

guard 구문은 주로 후속 코드들이 실행되기 전에 특정 조건을 만족하는지 확인하는 용도로 사용합니다. 다시 말해 특정 조건을 만족하지 않은 채로 후속 코드를 실행하면 심각한 오류가 발생할 경우에, 전체 구문을 조기 종료(Early Exit)하기 위한 목적으로 사용되는 것이 guard 구문입니다. 따라서 guard 구문의 else 블록에는 이후의 코드 진행을 막아주는 구문이 반드시 포함되어야 합니다. return 또는 break 구문 등이 이에 해당하죠. guard 구문은 보통 함수나 메소드에서 사용되는데, 이때에는 return 구문이 이같은 조기 종료 처리 역할을 합니다.

var stopNum = 10

while true {
    stopNum = Int.random(in: 1...10)
    
    guard stopNum <= 8 else {
        print("stopNum = \(stopNum) : 변수가 8 보다 큰 수가 들어와 반복문을 종료합니다.")
        break
    }
    
    print("stopNum = \(stopNum) : 변수가 8 보다 작습니다. 반복문을 계속합니다.")
}
stopNum = 4 : 변수가 8 보다 작습니다. 반복문을 계속합니다.
stopNum = 3 : 변수가 8 보다 작습니다. 반복문을 계속합니다.
stopNum = 3 : 변수가 8 보다 작습니다. 반복문을 계속합니다.
stopNum = 7 : 변수가 8 보다 작습니다. 반복문을 계속합니다.
stopNum = 9 : 변수가 8 보다 큰 수가 들어와 반복문을 종료합니다.

guard 구문을 이용해 while 반복문을 정지 시키는 예제입니다. 하지만 실제로는 while 문의 조건문에 stopNum <= 8 라는 조건을 넣어주는것이 효율적입니다. 반복문 안에서 stopNum에 랜덤한 정수를 대입합니다. guard 구문에서 stopNum가 8보다 작거나 같다면 통과시키지만 8보다 크다면 break를 통해 반복문을 종료시킵니다. 이처럼 guard 구문의 조건절을 만족시키지 않는다면 else 구문을 통해 다른 동작을 구현할 수 있습니다.

Last updated