[10/4] guard 문

Dino·2022년 10월 4일
0

iOS프로그래밍 기초

목록 보기
9/18

guard문

guard문은 값을 언래핑(unwrapping)하기 위해서 옵셔널 바인딩을 이용하며, 그 값이 10보다 작은지 검사

  • 변수가 nil이거나 구 값이 10보다 크면, else 절이 실행되어 에러 메시지가 출력하고 함수에서 빠져 나가도록 return문이 실행된다
  • 10보다 작은 값이면, guard문 아래에 있는 코드가 실행되어 그 값에 10이 곱해진 값이 출력된다
func multiplyByTen(value: Int?) {
guard let number = value, number < 10 else {//조건식(값이 있고 10보다 작은)이 거짓일 때 실행
print("수가 없거나 10보다 크다.") //거짓 : 값이 없거나 10보다 크면
return
}
print(number*10) //조건식이 참일 때 실행, 주의 : number를 여기서도 사용 가능 }
multiplyByTen(value: 3) //30 multiplyByTen(value: nil) multiplyByTen(value: 20)
  • 언래핑된 number 변수를 guard문 밖에 있는 코드가 사용하 수 있다
  • if문을 이용하여 언랭핑된 변수는 그렇게 못한다

guard문 조건식이 거짓이면 실행)

guard문은 swift 2에 도입된 구문이다.
guard문은 표현식이 거짓(flase)으로 판단될 경우에 수행될 else 절을 반드시 포함해야한다.

  • else 절에 속한 코드는 현재의 코드 흐름을 빠져 나갈 수 있는 구문(return, break, continue, throw 구문)을 반드시 포함해야 한다
  • 또는 다른 함수를 else 코드 블록 안에서 호출할 수도 있다
guard <불리언 표현식> else {
// 표현식이 거짓일 경우에 실행될 코드
<코드 블록을 빠져 나갈 구문>
}
// 표현식이 참일 경우에 실행되는 코드는 이곳에 위치

guard문은 기본적으로 특정 조건에 맞지 않을 경우에 함수나 반복문에서 빠져 나갈 수 있도록 하는 '조기 출구(early exit)' 전략을 제공한다

guard~let의 활용

guard는 return, break, continue, throw 등 제어문 전환 키워드를 쓸 수 있는 상황이라면 사용이 가능하다.
그래서 함수 뿐 아니라 반복문 등 특정 블록 내부에 있으면 사용 가능하다 물론 함수 내부에 있다면 보통 return을 써서 해당 함수를 조기에 빠져나로는 조기 출구 용도로 사용한다.

실제 앱을 만들다 보면 옵셔널 바인딩 때문에 다중 if~else를 사용해야 하는데, guard~let을 사용하면 다중 루프가 없는 훨씬 가독성이 좋은 코드가 가능해서 그런 경우 많이 사용한다.

  • 다음은 while문 안에 guard와 break문을 사용한 경우이다
var x = 1
while true {
guard x < 5 else { break }
//조건(x<5)이 거짓일 때 실행(break) 
print(x) //1 2 3 4, 조건(x<5)이 참일 때 실행
x=x+1
}

if let vs. guard let

  • if let
func printName(firstName:String, lastName:String?){ // if let
  
if let lName = lastName { // lastName이 nil이 아니면
  print(lName,firstName)
} else {
print("성이 없네요!")
}
}
printName(firstName: "길동", lastName:"홍")
printName(firstName: "길동", lastName:nil)
  • guard let
func printName(firstName:String, lastName:String?){
 
guard let lName = lastName else { // lastName이 nil이면
    print("성이 없네요!")
return // early exit
}
print(lName,firstName)
}
printName(firstName: "길동", lastName:"홍")
printName(firstName: "길동", lastName:nil)

주의 : 언래핑된 변수는 guard let 루프 밖에서 사용 가능하다

iOS프로그래밍기초(22-2학기) 한성현교수님 강의 내용 변형 및 요약

profile
깃허브 : https://github.com/Hangga99

0개의 댓글