🔥 조기 종료

346자
5분

프로그래밍을 하다 보면, 특정 조건이 충족되지 않을 때 코드 블록의 실행을 중단하고 빠르게 종료해야 하는 경우가 종종 있습니다. 이럴 때 사용할 수 있는 것이 바로 guard 문이에요.

guard 문은 if 문과 비슷하게 Boolean 표현식의 값에 따라 코드를 실행합니다. 하지만 guard 문은 항상 else 절을 가지고 있어야 해요. 만약 guard 문의 조건이 충족되지 않으면, else 절 안의 코드가 실행됩니다.

예를 들어볼까요?

func greet(person: [String: String]) {
    // person 딕셔너리에 "name" 키가 존재하는지 확인합니다.
    guard let name = person["name"] else {
        // "name" 키가 없으면 함수를 즉시 종료합니다.
        return
    }
 
    // "name" 키가 존재하면 인사말을 출력합니다.
    print("Hello \(name)!")
 
    // person 딕셔너리에 "location" 키가 존재하는지 확인합니다.
    guard let location = person["location"] else {
        // "location" 키가 없으면 기본 메시지를 출력하고 함수를 종료합니다.
        print("I hope the weather is nice near you.")
        return
    }
 
    // "location" 키가 존재하면 위치를 포함한 메시지를 출력합니다.
    print("I hope the weather is nice in \(location).")
}
 
greet(person: ["name": "John"])
// "Hello John!"을 출력합니다.
// "I hope the weather is nice near you."를 출력합니다.
 
greet(person: ["name": "Jane", "location": "Cupertino"])
// "Hello Jane!"을 출력합니다.
// "I hope the weather is nice in Cupertino."를 출력합니다.
swift

위 예제에서는 guard 문을 사용하여 딕셔너리에 특정 키가 존재하는지 확인하고 있네요. 만약 해당 키가 없다면 else 절 안의 코드가 실행되면서 함수가 조기 종료됩니다.

guard 문의 조건이 충족되면, 코드 실행은 guard 문의 닫는 중괄호 이후부터 계속됩니다. 조건의 일부로 옵셔널 바인딩을 사용하여 값을 할당한 모든 변수나 상수는 guard 문이 나타나는 코드 블록의 나머지 부분에서 사용할 수 있어요.

반면에 조건이 충족되지 않으면, else 분기 안의 코드가 실행됩니다. 이 분기에서는 guard 문이 속한 코드 블록을 반드시 종료해야 합니다. 이는 return, break, continue, throw와 같은 제어 전달 문을 사용하거나, fatalError(_:file:line:)와 같이 반환하지 않는 함수 또는 메서드를 호출하여 처리할 수 있습니다.

요구사항을 검사할 때 guard 문을 사용하면 if 문을 사용하는 것보다 코드의 가독성이 향상됩니다. guard 문을 사용하면 일반적으로 실행되는 코드를 else 블록으로 감싸지 않고 작성할 수 있으며, 요구사항이 충족되지 않을 때 처리하는 코드를 요구사항 바로 옆에 둘 수 있기 때문이에요.

이렇게 guard 문을 활용하면 불필요한 중첩을 피하고 코드의 흐름을 더 명확하게 만들 수 있답니다. 프로그램의 로직을 구현할 때 guard 문을 적재적소에 사용해보세요! 코드의 가독성과 안정성이 높아집니다.