[오늘의 Swift 지식] if let과 guard let의 차이는?

2021. 8. 9. 17:43·📌 Swift
-->

Optional Binding을 아시는 분들은 if let을 한 번쯤은 보셨을 겁니다.

오늘은 Optional Binding을 사용할 때 유용한 if let과 guard let에 대해 알아보겠습니다.

 

 

 

guard let과 if let은 공통적으로 옵셔널 바인딩이라는 특징을 가지고 있습니다.

 

Optional 타입은 값이 있을 수도, 없을 수도 있는 변수를 표현할 때 사용됩니다. 하지만 안전하게 값을 사용하려면 Optional Binding을 통해 Unwrapping해야 합니다.

 

이럴 때 안전하게 값을 추출하기 위해 사용하는게 guard let과 if let입니다.

 

 

if let이란?

if let은 성공시와 실패 시 2가지 경우로 나눠서, 두 분기 모두에 우리가 원하는 코드를 작성해줄 수 있는데요.
값이 있을 때 특정 코드를 실행하고, 값이 없는 경우(nil)에는 다른 처리를 할 수 있습니다

 

하지만, if let은 지역변수로만 사용이 가능하기 때문에 구문 내에서만 사용이 가능합니다.

func printName() {
    var name: String?
    name = "Jud"
    print(name) // Optional("Jud")

    if let myName = name {
        print(myName) // "Jud"
    } else {    // name의 값이 nil일 경우.
        print("nil")
    }
}

 

아래와 같이 name에 "Jud"가 아닌 nil을 넣게 되면, if let 구문의 안에 있는 print(myName)이 실행되지
않으며 else 구문으로 넘어가서 "nil"이 출력되게 됩니다.

func printName() {
    var name: String?
    name = nil
    print(name) // nil

    if let myName = name {
        print(myName) // 실행되지 않음.
    } else {
        print("nil") // "nil"
    }
}

 

또한, if let 구문에서 else는 선택적 사용이기에 꼭 사용하지 않아도 상관없습니다.

 

 

그렇다면 guard let은?

guard let은 값이 nil일 경우 else 블록이 실행되어 코드의 흐름을 제어하는 방식입니다.

 

else 블록 내부에서는 반드시 제어문 전환 명령어인 return, break, continue, throw 중 하나를 사용해야 하며, 이를 통해 함수 종료, 반복문 중단, 다음 반복 실행, 예외 처리 등 다양한 흐름을 관리할 수 있습니다.

 

또한, if let과는 달리 guard문은 항상 else 블록과 함께 사용되며, 바인딩된 변수는 이후 코드에서도 계속 활용이 가능합니다.

func printName() {
    var name: String?
    name = "Jud"
    print(name)     // Optional("Jud")

    guard let myName = name else { return }
    print(myName)   // "Jud"
}

 

아래는 위의 예시와 다르게 continue문을 사용한 예시 코드입니다.

func printName() {
    var name: String?
    name = nil  // 이름이 없음

    for _ in 1...3 {  // 반복문을 3번 실행
        guard let myName = name else {
            print("이름이 없습니다. 다음 반복으로 넘어갑니다.")
            continue  // 현재 반복 건너뛰고 다음 반복 실행
        }
        print(myName)
    }
}

// 출력 : 
// 이름이 없습니다. 다음 반복으로 넘어갑니다.
// 이름이 없습니다. 다음 반복으로 넘어갑니다。
// 이름이 없습니다. 다음 반복으로 넘어갑니다。

 

 

 

if let vs guard let 

특징 if let guard let
사용 목적 값이 있을 때만 실행 값이 없으면 흐름 제어 및 함수 종료
지역 변수 if블록 내에서만 사용 가능 guard 이후 코드에서도 사용 가능
else 필요 여부 선택적 사용 필수 (return, break 등 포함)

 

 

if let과 guard let에 대한 설명은 여기까지입니다.
이 글을 읽으신 분들이 있다면 조금이나마 도움이 되길 바라며,
오타나 틀린 점이 있으면 지적해주시면 감사하겠습니다 :)

 

 

Reference

야곰 스위프트 프로그래밍 3판

Guard let / If let

if let, guard let 차이

 

 

 

'📌 Swift' 카테고리의 다른 글

[오늘의 Swift 지식] In-Out이란 무엇일까?  (0) 2021.08.24
[오늘의 Swift 지식] 전달인자(Argument)와 매개변수(Parameter)  (0) 2021.08.13
[오늘의 Swift 지식] Optional Binding이란? 🧐  (0) 2021.08.05
[오늘의 Swift 지식] 정렬 sort()와 sorted()  (0) 2021.07.17
[오늘의 Swift 지식] Optional이란? 🤔  (0) 2021.07.11
'📌 Swift' 카테고리의 다른 글
  • [오늘의 Swift 지식] In-Out이란 무엇일까?
  • [오늘의 Swift 지식] 전달인자(Argument)와 매개변수(Parameter)
  • [오늘의 Swift 지식] Optional Binding이란? 🧐
  • [오늘의 Swift 지식] 정렬 sort()와 sorted()
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (45) N
      • 📌 Swift (10)
      • 📱 iOS (4)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (2)
      • 🖋️ TIL Journal (21) N
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    ios
    weak vs unowned
    Optional
    후행클로저
    github 협업 방식
    Split
    the requested url returned error: 403!
    random(in:)
    weak
    TiL
    swift 중복 없는 랜덤 숫자
    remote url
    GitHub
    깃허브 복구
    깃허브 로컬 복구
    swift 대소문자
    shuffled()
    github the requested url returned error: 403
    클로저란?
    Components
    swift
    github 기반 협업 방식
    트레일링 클로저
    joined()
    convenience init
    static
    swift optional
    swift ismultiple
    swift 아스키
    편의 이니셜라이저
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
MoriOS
[오늘의 Swift 지식] if let과 guard let의 차이는?
상단으로

티스토리툴바