dev._.note

[Swift] Guard문 본문

Dev/SWIFT

[Swift] Guard문

Laena 2023. 12. 8. 20:47

📌 guard문이란

guard 문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정하는것, guard 문에 주어진 조건문이 거짓일 때, 여기에 달려 있는 코드블럭이 실행. 조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는것보다 가독성이 높은 장점.
if 문과 다르게 else를 항상 달아야 함.
아래 함수는 nil 입력을 가드함. 만일 입력이 nil이면 guard문은 else 절을 수행하고 다른 구문이 수행되기 전에 함수를 return함.

 


guard 조건문 else {
	조건문이 false일 떄 실행
}
	조건문이 true일 떄 실행

 

💡 guard문을 사용하여 과도한 들여쓰기 막기

  • guard문은 다른 언어에 거의 없고 swift언어에만 있는 문법
  • guard문의 의미는 코드의 흐름에서 막아야 하는 조건이라는 의미
  • guard를 사용하면 과도한 들여쓰기를 막고 읽기 쉽게 표현이 가능

ex) 

guard문 쓰기 전

func processUserInput(_ input: String?) {
    if let unwrappedInput = input {
        if unwrappedInput.count > 0 {
            if let intValue = Int(unwrappedInput) {
                if intValue >= 0 {
                    print("입력한 값 > 양수")
                } else {
                    print("입력한 값 > 음수")
                }
            } else {
                print("입력한 값 > 정수 x")
            }
        } else {
            print("입력한 값 > empty")
        }
    } else {
        print("입력한 값 > nil")
    }
}

 

guard문을 사용하여 과도한 들여쓰기 제한

func processUserInput2(_ input: String?) {
    guard let unwrappedInput = input, !unwrappedInput.isEmpty else {
        print("입력한 값 > empty or nil")
        return
    }

    guard let intValue = Int(unwrappedInput) else {
        print("입력한 값 > 정수 x")
        return
    }

    if intValue >= 0 {
        print("입력한 값 > 양수")
    } else {
        print("입력한 값 > 음수")
    }
}
  • guard문을 사용하면 위처럼 과도한 들여쓰기를 막고, if문이 아니라 guard라는 키워드이므로 '코드의 진행을 막아야 한다'는 명확한 의미 전달이 쉬운 장점이 존재

guard문 사용 시 주의사항

  • '코드의 진행을 막아야 한다'라는 의미로 guard문을 사용하다보면 if문을 사용하지 않는 케이스가 있는데, 이중부정을 하게된다면 guard문이 아닌 if문을 사용할 것
    • *이중부정: 부정을 두 번 수행한 코드를 의미
  • guard문을 사용하면 조건식이 false인 경우, 코드의 진행사항을 막는데 이 조건식에 부정을하면 개발자는 이 코드를 읽으면서 2번 생각해야하는 안좋은 코드가 됨
// guard문 블럭 return 부분은 value값이 비어있는것의 부정의 부정 (== value.isEmtpy)이 되어야 실행
// 이중부정으로 인해 읽기 어려운 코드
guard !value.isEmpty else {
    return
}
  • 이럴땐 if문 사용할 것
if value.isEmpty {
    return
}

 

 

출처 : 

 

[iOS - swift] guard문 잘 사용하기 (#guard문 사용 시 주의사항, #이중부정, #2중부정)

guard문을 사용하여 과도한 들여쓰기 막기 guard문은 다른 언어에 거의 없고 swift언어에만 있는 문법 guard문의 의미는 코드의 흐름에서 막아야 하는 조건이라는 의미 guard를 사용하면 과도한 들여쓰

ios-development.tistory.com

 

'Dev > SWIFT' 카테고리의 다른 글

[Swift] 예외처리  (0) 2023.12.11
[Swift] 클로저(Closure)  (0) 2023.12.10
[Swift] 키오스크 과제  (1) 2023.12.07
[Swift] 접근 제한자  (0) 2023.12.06
[Swift] 타입 캐스팅(Type Casting)  (2) 2023.12.05