조앤의 기술블로그
[Swift] guard Statement (guard문) 본문
우선, guard문은 'Early Exit'입니다.
즉, 원하는 조건이 충족되지 않으면, 불필요한 코드는 실행하지 않고 일찍 종료해 버립니다.
기본 syntax를 보겠습니다.
[Syntax]
guard condition else {
Statements
}
guard optionalBinding else {
Statements
}
Condition을 만족하지 않는다면 else 블록 내부에 있는 Statements가 실행됩니다.
condition절에는 condition이 오거나, Optional Biding이 와도 됩니다.
Condition 절은 Bool 형을 return해야 합니다.
else 문은 생략할 수 없습니다.
[장점]
if문의 경우, 조건의 수가 늘어날 수록 코드가 중첩되는데,
guard문은 중첩을 피할 수 있고, 코드가 깔끔해진다는 것이 장점입니다.
예제를 보겠습니다.
func validate(id: String?) -> Bool {
guard let id = id else {
return false
// 실제로 문자열이 저장되어 있는지 확인
}
guard id.count >= 6 else {
return false
// 문자열 길이 확인
}
return true
}
두개의 guard문을 하나의 guard문으로 합쳐보겠습니다.
조건을 , 로 나열하면 됩니다.
guard let id = id, id.count >= 6 else {
return false
}
[if문과의 비교]
같은 내용의 코드를 if문으로 작성해보겠습니다.
func validateUsingIf() {
var id: String? = nil
if let str = id {
if str.count >= 6 {
print(str)
}
}
}
코드가 중첩되고, 상수 str을 if문 내부에서만 사용할 수 있습니다.
이 코드를 guard문으로 작성해보겠습니다.
func validateUsingGuard() {
var id: String? = nil
guard let str = id else { return }
guard str.count >= else { return }
print(str)
}
조건이 늘어나더라도 코드가 중첩되지 않으므로 코드의 가독성이 좋습니다.
상수 str을 guard 문 이후에서 사용할 수 있습니다. (else블록에서는 사용이 불가합니다.)
[결론]
경우에 따라 알맞게 사용하면 되겠습니다.
<if문>
- 조건이 하나거나, 단순한 경우.
- Binding을 사용할 경우
<guard문>
- 조건이 복잡할 경우,
- Binding 값을 동일한 scope 내에서 계속 사용해야 할 경우
감사합니다.
참고: KxCoding (유튜브 채널: https://www.youtube.com/channel/UCtVacbJccQlQL_FP5XSEQMQ)
정말 좋은 강의들이 많으니 Swift언어를 공부하시는 분들이라면 꼭 강의들어보시길 추천드립니다.
'Study > Swift' 카테고리의 다른 글
[Swift] Functions #2 (0) | 2020.02.18 |
---|---|
Functions #1 (function, return type, parameter) (0) | 2020.02.18 |
[Swift] Structures and Classes (구조체와 클래스) (0) | 2020.02.16 |
[Swift] 클로저 (Closure) (0) | 2020.02.16 |
[Swift] 옵셔널 체이닝 (Optional Chaining) (0) | 2020.02.15 |