ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Early Exit
    Swift 2021. 4. 13. 10:55

    안녕하세요. 그린입니다🟢

    저번 포스팅인 옵셔널 체이닝에 이어 관련된 Early Exit, 빠른종료에 대해 학습해보겠습니다🧑🏻‍💻

     

    옵셔널 체이닝과 옵셔널 바인딩은 이해가 된 상태에서 빠른 종료의 키워드인 guard에 대해 알아보고

    if와는 어떤 옵셔널 바인딩에서 차이가 있을지에 대해 배워보겠습니다🙌

    Early Exit

    : 빠른종료로 if문에서는 else 구문이 없어도 되며 만약 else 구문이 있을때는 if와 else 구문 모두 구현을 해주며 분기를 해줍니다.
    그러나 guard 구문은 꼭 else 구문이 있어야 됩니다. else 구문에서는 무조건 상위의 코드블럭을 종료시키는 제어문 전환 명령 혹은 그 구문을 탈출시킬 수 있는 비반환 함수 / 메서드 호출이 있어야 합니다.

    제어문 전환 명령어

    : return, break, continue, throw

    Early Exit 장점

    : 만약 예외사항만 처리하려고 한다면 if보다는 guard 구문을 사용하는것이 코드의 간결성을 높여줍니다.
    : guard 구문을 통해 옵셔널 바인딩도 해줄 수 있습니다.

    guard 구문을 통한 옵셔널 바인딩 사용

    func description(_ product: [String: String]) {
        guard let color: String = product["color"] else {
            return
        }
        print("This color is \(color)")
    
        guard let size: String = product["size"] else {
            print("This size is none")
            return
        }
        print("This size is \(size)")
    }
    
    var product: [String: String] = [String: String]()
    product["color"] = "Green"

    : size가 없어도 옵셔널 바인딩이 되어 아래와 같은 출력을 나타냄

    This color is Green
    This size is none

    : 만약 여기서 사이즈 추가로 부여해준다면 다시 두 출력문이 정상적으로 데이터 값이 들어가서 나타나게됨

    product["size"] = "Big"
    
    //This color is Green
    //This size is Big

    여러 조건 추가로 guard 구문의 사용

    var product: [String: String] = [String: String]()
    product["color"] = "Green"
    product["size"] = "Big"
    
    func info(color: String?, size: String?) {
        guard let color: String = color, let size: String = size else {
            print("It's not collect")
            return
        }
        print("This product's color is \(color) & size is \(size)")
    }
    
    info(color: product["color"], size: nil)
    
    //It's not collect

    : 이렇게 guard let 옵셔널 바인딩 조건에 여러 조건을 한번에 나열하고 싶으면 콤마(,)로 나타내줍니다.
    : 해당 조건은 불리언 타입이며 AND(&&)와 같은 동작을 해줍니다.

    info(color: product["color"], size: ["size"])
    
    //This product's color is Green & size is Big

    guard 구문 사용이 되지 않는 상황

    : 함수/메서드 등 코드 블록 내부에서만 사용이 가능함으로 코드 블록 밖에 있다면 코드 블록을 탈출하는 제어문 전환 명령을 사용할 수 없음으로 이 경우에는 사용할 수 없습니다.

     

    [회고]

    이렇게 이전 포스팅인 옵셔널 체이닝에 이어 빠른 종료에 대해서도 학습해보았습니다. 옵셔널 바인딩/체이닝 그리고 빠른 종료까지 왜 if문과 guard문이 따로 있는것인지 어느 상황에서 어느 구문을 사용할지 이제 감이 오는것 같습니다. 중요한 포인트는 어느 구문이 더 낫다 장점이 있는것이 아닌 각 구문마다 적절한 상황이 있다는것!!😃 빠르게 예외사항을 처리해주고 싶다면 guard 구문을 사용하는것이 이번 빠른 종료에서 배운점이였습니다✍️

     

    [참고자료]

    스위프트 프로그래밍 3판 (야곰 지음)

    'Swift' 카테고리의 다른 글

    Closure 심화  (0) 2021.04.27
    소켓통신  (0) 2021.04.19
    Optional Chaining  (0) 2021.04.12
    GCD & Operation  (0) 2021.04.09
    lazy var  (0) 2021.03.17
Designed by Tistory.