스위프트 guard 구문 | 스위프트강좌 Swift

스위프트 guard 구문

애플이 정말 빠르게 스위프트 개선판을 내놓고 있습니다. 스위프트에 대한 애플의 결단은 아주 확고한 것으로 보입니다. 계속 개선되는 스위프트 구문 중 이번에 다룰 것은 스위프트 guard 구문입니다.

그럼 guard 구문은 무엇일까요? 

guard 구문은 if문과 비슷하면서도 다릅니다. if문처럼 조건식의 참, 거짓 판단을 통해 진행하지만 약간 다른 형태와 용도로 쓰입니다. 

애플의 예제를 보면 다음과 같습니다. 

NewImage

위 구문에서 greet 함수는 두 개의 guard 구문을 가지고 있습니다. 

첫 번째 guard 구문은 name값이 존재하면 바로 해당 구문을 종료하고 다음으로 진행합니다. 두 번째 guard 구문은 location값이 존재하면 해당 guard 구문의 범위를 지나치고 다음으로 진행합니다.

예를 들어,

greet([“name”: “Steve Jobs”])

greet([“name”: “Steve Jobs”] , “location”: “Cupertino”])

이 두 개의 구문을 순차적으로 실행했을 때 어떤 값이 나오는지를 예상할 수 있다면 guard 구문의 동작원리를 이해할 수 있습니다.

첫 번재 코드는 다음 결과를 출력할 것입니다.

Hello, Steve Jobs!
I hope the weather is nice near you.

두 번째 코드는 다음 결과를 출력할 것입니다.

Hello, Steve Jobs!
I hope the weather is nice in Cupertino.

첫 번째 코드에서는 greet 함수의 인수로 던져진 사전(Dictionary)의 location 인덱스에 해당 값이  존재하지 않기 때문에 두 번째 guard문에서 else 이후를 출력하게 되는 것입니다. 

두 번째 코드에서는 greet 함수의 인수로 던져진 사전(Dictionary)에 name과 location 인덱스에 해당 값들이 각각 존재하기 때문에 첫 번째 결과물과는 다른 결과를 출력합니다. 

그럼 guard 구문은 왜 쓰일까요? 

스위프트에는 Optional이 존재하기 때문에 값을 확인하는데 다음과 같은 구문이 종종 사용됩니다. 

func 나누기(x: Int, y: Int?) -> Double {

     if let y = y where y > 0 {

       return x / y

      }

}

위의 경우는 확인해야할 값의 조건이 단순할 경우에는 큰 문제가 되지 않지만 다양한 조건들을 일일히 확인해야할 경우에 중첩되는 구문이 연속되기 때문에 코드가 복잡해질 수 있습니다. 

guard 구문을 이용하면 이런 복잡도를 줄일 수 있을 뿐만 아니라 let을 이용한 Optional값을 벗겨내는 것과 같이 동일한 효과를 볼 수 있습니다. 

그렇기 때문에 guard 구문이 유용하게 사용될 수 있는 것입니다. 

 

답글 남기기