조앤의 기술블로그

[Swift] guard Statement (guard문) 본문

Study/Swift

[Swift] guard Statement (guard문)

쬬앤 2020. 2. 16. 13:52

우선, 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언어를 공부하시는 분들이라면 꼭 강의들어보시길 추천드립니다.