말 그대로 '가드'이다. 아파트에 등록된 거주자만 들어갈 수 있는 아파트 입구의 차단기를 생각하면 쉽다. 아니면 필터?
guard문이 차단기로 작성한 조건에 걸리면 retuen
문이나 throws
문으로 차단당하고, 걸리지 않으면 정상적으로 하단의 코드플로우가 실행된다.
우리 아파트에 등록되지 않은 차량은 진입하지 못합니다!
영화나 게임에 보면 타이밍에 맞게 두 명의 사람이 홍채를 인식해야 열리는 연구실 문이 나오곤 한다. 이를 코드로 간단하게 구현해보고 if문과 guard문의 차이를 알아보자.
밑의 open_1과 open_2버튼 두개가 눌려야 '잠김'에서 '열림'으로 변하는 간단한 코드이다.
HStack{
Button(action: {
VM.doorCondition_1 = true
VM.doorCheck()
}, label: {
Text("open_1")
})
Button(action: {
VM.doorCondition_2 = true
VM.doorCheck()
}, label: {
Text("open_2")
})
}
각 버튼을 누르면 바인딩된 ViewModel의 doorCondition_1과 doorCondition_2가 각각 true로 변경이되고, 변경을 체크하는 doorCheck()함수가 실행되어 두 변수가 true로 변했는지 체크한다.
여기서 if문을 사용하면,
func doorCheck(){
if self.doorCondition_1 == true {
if self.doorCondition_2 == true{
self.doorOpenStatus = "열림"
}
}
}
이렇게 우리가 흔히 아는 코드로 작성해서 체크할 수 있다.
그럼 이제 이 코드를 guard문으로 변경해보자.
func doorCheck(){
guard self.doorCondition_1, self.doorCondition_2 else { return }
self.doorOpenStatus = "열림"
}
코드의 가독성이 상당히 좋아진 것을 확인할 수 있다.