티스토리 뷰

Swift

[스위프트] guard let / if let

Hani_Levenshtein 2021. 3. 21. 20:52

안녕하세요 Hani입니다.

이번 포스팅에선 guard let과 if let에 대하여 알아보겠습니다.  ☺️

 

 

 

 

Optional Binding

옵셔널 타입에는 값이 있을 수도 없을 수도 있는데

강제로 언래핑해서 값을 가져오려 하다가 nil을 가져오게 되면 프로그램이 죽습니다.😡

 

옵셔널에 의해 래핑된 값을 안전하게 벗겨 사용하기 위한 방법 중 하나로 옵셔널 바인딩이 있는데

오늘은 if let과 guard let을 통한 옵셔널 바인딩을 알아볼 거예요.

 


guard let

guard let은 특성상 블록 내부에서만 사용되며, 에러인 경우와 에러가 아닌 경우를 나눠서 처리하기 위해 사용됩니다.

옵셔널을 벗겼을 때 nil이면 더 이상 코드를 실행시키지 않겠다는 의미가 강합니다.

-> nil이 아닐 때만 관심을 갖겠다.

 

func twice(price: Int?) {
    guard let price = price else { return }
    print(2 * price)
}

guard문은 조건이 true가 아닐 때 else 내부의 코드를 실행시킵니다.

else안에는 return, throw 등의 명령이 들어가게 됩니다.

 

 

옵셔널 바인딩을 할 때는 함수의 매개변수와 동등한 이름의 변수를 만들어서 코드를 전개할 수 있습니다.

 

 

위에서도 말했듯, guard문은 에러처리를 먼저 하여 에러가 있으면 코드 실행을 중지해버립니다. (Early Exit)

요구 사항에 대한 검사를 if로 처리하는 것 보다 guard로 처리하는 것이 가독성이 향상됩니다. 💪🏻

 


if let

옵셔널을 처리할 때, nil이면 어떻게 처리하고.. nil이 아니면 그 결과에 따라 어떻게 처리할지 정해주고 싶을 때 if let을 사용합니다.

옵셔널 결과에 따라 각각 피드백을 주고싶다는 의미가 강합니다.

-> nil일 때도 관심을 갖고 nil이 아닐 때도 관심을 가짐

 

func twice(price: Int?) {
    if let price = price {
        print(2 * price)
    } else {
        print("price 없음")
    }
}

References

https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html

'Swift' 카테고리의 다른 글

[Swift] Init vs Convenience Init  (0) 2021.05.01
[Swift] Deque, OrderedSet, OrderedDictionary  (0) 2021.04.07
[Swift] Color Literal / Custom Color  (0) 2021.03.15
[Swift] 익스텐션  (0) 2021.01.17
[Swift] 인스턴스  (0) 2021.01.16
댓글