[Swift] Guard

Page·2022년 5월 27일

Swift

목록 보기
5/6
post-thumbnail

Guard란?

If문과 비슷하게 이용할 수 있는 조건식 문법이다. 항상 If문으로 대체 가능하고, 가독성 측면에서 이점이 크다.

If문과 다른 점은 조건문에 해당되지 않으면 반드시 return되어야 한다는 점이다. 그래서 다른 함수 블록에서 이용한다.

코드를 보고, 조건문에 해당되지 않으면 쫓아낸다! 라고 떠올리면 된다.

기본 사용

func guardTest(value: String?) {
    guard value != nil else { return }
    print("guard : \(value)")
}

func guardToIf(value: String?) {
    if value != nil {
        print("If : \(value)")
    } else { return }
}

var value: String? = "Swift"

guardTest(value: value)
guardToIf(value: value)

들어온 String이 nil이라면 종료되는 메소드를 두개 만들었다.

코드를 읽을 때 guard는 value가 nil이 아닌 경우에만 다음 기능을 수행한다, 라고 더 깔끔하게 이해되는 측면이 있는데 if문은 value가 nil이 아닌 경우에는 이렇고 아닌 경우에는 저렇다.. 라고 조금 더 신경을 써야하는 것 같다.

코드를 이해할 때도 그렇지만 눈으로 보기에도 guard가 더 깔끔하다.

nil값 아니면 할당하기

SwiftUI를 공부하면서 익숙하게 본 guard 사용 형태는 값을 할당해 줄 때다.

import UIKit

func guardTest(value: String?) {
    guard let v = value else { return }
    print("guard : \(v)")
}

func guardToIf(value: String?) {
    if let v = value {
        print("If : \(v)")
    } else { return }
}

var value: String? = "Swift"

guardTest(value: value)
guardToIf(value: value)

들어온 value값이 nil이면 종료하고 그게 아니면 값을 할당해준다.
guard가 뭔지는 잘 모르겠고 nil이면 종료된다는 것만은 이해하고 있어서 try catch문 같은거라고 어렴풋이 짐작하고 있는 상태였는데 전혀 다른 거였다.

parameter인 value가 nil이라면 아무런 작업을 하지 않고 메소드가 종료된다.
아무래도 IF문이 익숙하기때문에 IF문을 자주 사용할거 같은데, 다른 코드에서 guard를 이용했다면 어떤 목적으로, 어떤 상황에 썻는지 눈 여겨 봐야겠다.

0개의 댓글