[Swift] if let vs guard let (기본편)

안녕하세요~ 차니에요!

오늘은 if let과 guard let의 특징과 사용법 그리고 차이점에 대해 알아보겠습니다!

1. Snippets

Xcode Snippets을 활용해보도록 하겠습니다.

Snippets은 자동완성으로 생각하시면 될 것 같아요.

Xcode 내에서 기본적으로 만들어져 있는 항목들도 있고 커스텀 키워드의 자동완성 또한 만들 수 있으니 활용해보시면 좋을 것 같아요.

Snippsets은 Xcode 오른쪽 상단 '+' 버튼을 누르면 볼 수 있습니다.

2.  if let

2-1. if let 정의

옵셔널이 값을 가지고 있는지 확인하고 임시 상수 혹은 변수를 사용할 수 있다고 나와있습니다.

if let은 Optional 값을 Unwrapping 하는 과정입니다.

옵셔널에 대한 내용은 다음에 시간내서 다루어보도록 하겠습니다!

 

간단하게 말하면 if문 안의 조건문의 값이 nil인가 아닌가를 체크하는 문법입니다.

조건문이 nill이 아니라면 해당 블럭이 실행되는 구조입니다.

 

아래 예제를 통해 사용법을 보도록 하겠습니다.

2-2. if let 예제

if let str = data {
    print("data :: \(str)")
} else {
    print("data is nil")
}

위와 같은 if let 코드가 작성되었다고 가정해보겠습니다.

if let은 nil이 아닐 때 실행되는 문법이라고 했었죠? if문이기 때문에 else 또한 작성이 가능합니다.

let data: String? = nil
let data: String? = "차니👋🏻"

nil일 때와 아닐 때 분기 처리된 모습
if let 조건문에 선언한 변수는 지역 변수이기 때문에 if문 내부에서만 사용이 가능합니다.

3. guard let

3-1. guard let 정의

하나 이상의 조건이 충족되지 않으면 제어권을 이전한다고 나와있습니다.

guard 안의 조건문이 참(true)이 아니면 else문이 실행되는 문법입니다.

 

예제를 통해 알아보도록 하겠습니다.

3-2. guard let 예제

func guardExample(_ testBool: Bool?) {
    guard let bool = testBool, bool else {
        print("참이 아니다.")
        return
    }
    
    print("result bool :: \(bool)")
}

코드를 보면 guard문 안에 조건이 2가지 있습니다.

첫 번째로 guard let bool 변수에 testBool 변수를 담아주었고 두 번째로 bool 입니다.

아래와 같이 각각 다른 조건을 통해 호출하여 결과를 보도록하겠습니다.

guardExample(true)
guardExample(false)

좌) 조건문이 참이기에 else 문이 실행되지 않았습니다. 우) 조건문이 충족되지 않아 else 문이 실행되었습니다.

예제에서 보이듯 if let과 달리 guard let으로 선언한 변수는 guard문 밖에서도 사용이 가능합니다.

4. if let, guard let 차이점

if let

1. 조건문의 Optional 값이 nil인지 확인하고 2분기로 작업할 수 있다.

2. 지역변수로만 사용 가능하다.

 

guard let

1. 조건이 true 일 때 코드가 계속 실행된다.

2. 전역변수로 사용이 가능하다.

3. 조건이 false 일 때 else 문이 실행되며 상위 코드 블럭을 종료하는 함수가 반드시 필요하다. (continue, break return, throw 등)

 

이러한 차이가 있기 때문에 상황에 맞게 사용하는 것이 바람직합니다~!

 

다음 포스팅에서는 두 문법을 활용한 응용편으로 찾아뵙겠습니다.