[Swift 5/부스트 코스] iOS 프로그래밍을 위한 스위프트 기초 - guard (1-25) 생각해보기 / if와 guard
안녕하세요. 개발하는 정주입니다.
오늘은 guard에 대해 포스팅하려고 합니다.
부스트 코스 1-25 내용입니다. 생각해보기를 통해 if와 guard의 차이점도 함께 알아보도록 합시다.
http://www.boostcourse.org/mo122/lecture/11313
생각해보기
if와 guard는 뭐가 다를까요? if와 guard 모두 특정 조건에 따라 분기한다는 점은 동일합니다. 따라서 특정 상황을 제외하면 둘 중 무엇을 선택해도 코드 로직에 영향을 주진 않을 것입니다.
여기서 특정 상황이란 guard를 사용할 수 없는 상황입니다. guard는 Early Exit에 초점이 맞춰져 있으므로 무조건 return, break 등 종료 지시어가 있어야 합니다. 따라서 함수 내부, 반복문 내부가 아니면 gurad를 쓸 수 없는 것이지요.
그렇다면 왜 gurad를 사용할까요? if-else가 있는데도 어째서 guard가 Swift 2.0에 추가되었을까요?
let number = 10
func exampleIf() {
if number == 10 {
print("number is 10")
} else {
print("number is not 10")
}
}
func exampleGuard() {
guard number == 10 else {
print("number is not 10")
return
}
print("number is 10")
}
exampleIf()
exampleGuard()
사용 목적
if-else와 guard는 사용 목적이 다르다고 생각합니다.
if-else는 특정 조건에 맞는 코드를 실행하는데 목적이 있다고 생각합니다. if-else는 if 코드 블록과 else 코드 블록으로 나눠서 처리가 가능하고 if 단독으로도 사용이 가능합니다. 심지어 if-else if-else로 여러 조건에 따라 코드를 나눌 수도 있습니다. 위의 exampleIf()를 예로 들면 number가 10이냐 아니냐에 따라 다른 코드를 수행할 수 있다는 의미입니다. 이렇게 if-else는 조건에 따라 특정 코드를 실행시키는데 목적이 있다고 생각합니다.
guard는 Early Exist가 주된 목적입니다. 특정 조건이 아니면 빠르게 종료하는데 특화된 문법이라는 의미입니다. 위의 exampleGuard()를 예로 들면 number가 10이 아니라면 무조건 종료한다는 것을 알 수 있습니다. 이렇게 빠르게 함수나 반복문을 종료하는 것이 guard의 주된 목적입니다.
가독성
위에서 말했듯이 if-else는 조건에 따라 다른 코드를 실행하는데 목적이 있습니다. 즉, 두 조건의 코드를 모두 읽어봐야 한다는 의미입니다.
if-else 두 곳의 코드가 짧다면 다행이겠지만 두 곳의 코드가 모두 길어진다면 시간이 오래 소요될 수 있습니다.
하지만 guard는 다릅니다. 해당 조건이 아니라면 종료 로직이라는 것을 알고 있으니 guard 안의 로직과 밖의 로직의 역할을 명확히 알 수 있습니다. 따라서 코드를 해석하는데 시간과 부담이 덜겠지요.
이렇게 if-else와 guard는 목적성과 가독성에 따라 나눠 사용할 수 있겠습니다.
마무리 잡담
if-else와 guard는 동일한 역할이지만 어떻게 사용하냐에 따라 Clean Code에 영향을 준다는 것을 알았습니다.
감사합니다!
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.