Swift

[Swift] Guard문

효니로그 2024. 1. 2. 17:30

Guard 구문 (Guard Statement)

guard문은 하나 이상의 조건이 충족되지 않을 때 범위 밖으로 프로그램 제어를 전송하기 위해 사용한다.

guard condition else {
   statements
}

 

guard문은 조건을 확인하고 조건이 true이면 guard문을 종료하고 이후 코드를 계속 실행한다.

반대로 조건이 false이면 else블록을 실행하는데, 

else블록은 if문의 else블록과 달리 생략할 수 없으며, 

else블록 안에서 반드시 Scope를 종료해야 한다.

 

Scope를 종료하는 방법 중 가장 기본은 return를 사용하는 방법이다.

 

if문과 다르게 guard문의 경우 else블록을 작성하지 않으면 컴파일에러가 발생한다.

 

 

else블록에 return을 전달하고 함수를 호출해 보면

함수로 전달된 string "short"의 길이가 6글자가 안되므로 guard문의 조건은 false가 되고,

이후의 코드는 실행되지 않는다.

 

 

return은 즉시실행을 종료하는 구문이므로,

else 블록에서 코드를 구현하고 싶다면 반드시 return앞에서 구현해야 한다.

 

 

위 코드처럼 조건이 true라면 이때는 else블록이 실행되지 않고 guard문은 바로 종료되며,

이후 코드가 실행된다.

 

 

guard문을 추가하고 20자 이상되는 string을 전달했다.

 

첫 번째 guard문에서 전달된 id의 길이가 6보다 크거나 같은지를 검사한다.

조건이 true이므로 else블록이 실행되지 않고 guard문은 종료된다.

 

두 번째 guard문에서 전달된 id의 길이가 20보다 작거나 같은지 검사한다.

조건이 false이므로 "too long"이 출력됨을 확인할 수 있다.

 

해당 코드를 if문으로 작성한다면 아래처럼 작성할 수 있다.

 

if문의 경우 조건이 true일 때 if블록을 실행하는데 조건이 여러 개일 경우 if문을 중첩해야 한다.

조건이 늘어날수록 계속 중첩되므로 Pyramid of Doom문제가 발생할 수 있다.

 

반대로 guard문은 조건이 false인 경우에만 else블록이 실행되고,

true일 경우엔 else블록을 실행하지 않고 이후 이어지는 코드를 실행한다.

이처럼 guard문은 조건이 많아져도 중첩이 발생하지 않는다.

if문으로 작성한 코드와 guard문으로 작성한 두 코드를 비교해 보면

guard문으로 작성한 코드가 가독성이 조금 더 높다.