본문 바로가기
iOS/Swift 문법 심화 학습

guard

by 황민우 2022. 1. 28.

정의

- 코드를 안전하게 처리하기 위해 표현식을 검사하는 목적으로 사용합니다.

- 잘못된 값이 전달 될 시에 ( =표현식이 거짓이라면 ) 특정 실행구문을 빠르게 종료하고, 

  표현식이 거짓이 아니라면 else 블록 밖의 값을 실행 시킵니다


사용

  - 옵셔널 바인딩을 하기위한 목적으로 사용됩니다.

  - if 문과 다르게, 옵셔널 바인딩한 값을 메서드 내에서 지역변수처럼 사용할 수 있습니다.

  - 타입캐스팅과도 자주 사용됩니다. 

  - 디버깅 모드 뿐만 아니라 어떠한 조건에서도 동작합니다.

 

형식

guard <표현식> else {
	// 표현식이 거짓일 경우 실행될 코드
   	// 탈출 구문
}
	// 표현식이 참일 경우 실행될 코드

 

예제  1

  - 함수를 통한 guard문 예제입니다.

  - age의 값이 0~120 사이의 정수이기 때문에 else문 블록 밖에 구문이 출력됩니다.

  - age의 값이 옵셔널 바인딩 된 상태로 출력된 것을 확인 할 수 있습니다. 

func myTest(age: Int?){
    guard let myAge = age,
    myAge < 120,
    myAge >= 0 else{
        print("잘못된 값이 입력되었습니다.")
        return
    }
    print("당신은 \(myAge)세 입니다. ")
}
myTest(age: 24)

실행결과
// 당신은 24세 입니다.

  - 이번엔 age의 값이 범위 밖 즉, 거짓으로 판단될 때에 실행결과입니다.

  - else문 블록 안의 구문이 출력되었습니다. 

func myTest(age: Int?){
    guard let myAge = age,
    myAge < 120,
    myAge >= 0 else{
        print("잘못된 값이 입력되었습니다.")
        return
    }
    print("당신은 \(myAge)세 입니다. ")
}
myTest(age: 121)

실행결과
// 잘못된 값이 입력되었습니다.

 

예제 2

  - 이번엔 타입캐스팅이 포함된 guard 문에 대해 알아보겠습니다. 

  - 첫 번째 guard문을 보면 name의 타입이 String 타입으로 다운캐스팅 가능할 때, 다음 guard문을 진행하게

    작성되었습니다. 만약 타운캐스팅이 불가능하다면 return이 실행되어 구문에서 탈출되며 실행이 종료될 것입니다.

  - 두 번째 guard문을 보면 age의 타입이 Int 타입으로 다운캐스팅 될 때, name과 age 상수를 출력하게 코드가

    작성되었습니다. 만약 다운캐스팅이 되지 않는다면, return을 만나 구문이 종료되었겠죠?

  - 실행해보면 입력되는 값이 정상적으로 출력됨을 확인 할 수 있습니다.

func myTest(info: [String: Any]){
    guard let name = info["name"] as? String else{
        return
    }
    guard let age = info["age"] as? Int, age >= 0 else{
        return
    }
    print("\(name) : \(age)")
}
myTest(info: ["name": "SeaGreen", "age": 24])

실행결과
// SeaGreen : 24

 - guard 문은 많이 사용된다고 하니, 유연하게 사용할 수 있도록 학습하면 좋을 것 같습니다 :)


내용출처

https://youtu.be/heEKIxLs5Sc

'iOS > Swift 문법 심화 학습' 카테고리의 다른 글

값 타입과 참조 타입  (0) 2022.01.31
extensions  (0) 2022.01.30
assert  (0) 2022.01.28
Initializer  (0) 2022.01.27
타입캐스팅  (0) 2022.01.26

댓글