궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift : 기초문법 [Unwrapping with guard]

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

언래핑에 대한 기초적인 내용을 확인하시려면 여기를 클릭해주세요.

Unwrapping guard let 

guard 문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정 하는 것 입니다. guard 문에 주어진 조건문이 거짓일 때, 여기에 달려 있는 코드블럭이 실행됩니다. 

 

조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는것보다 가독성이 높은 장점 있습니다. if 문과 다르게 else 를 항상 달아야 합니다.

 

아래 함수는 nil 입력을 가드한다는 뜻이고, 만일 입력이 nil이면 guard문은 else절을 수행하고 다른 구문이 수행되기 전에 함수를 return 합니다.

func guardInFunc (string: String?) {

    guard string != nil else { return }

    print(string!, "second param", separator: "")

}

guardInFunc("test")

guardInFunc(nil)

If let 의 대안은 guard let 이며 unwrapping 옵셔널도 이에 해당합니다. guard let은 우리를 위해 언래핑 되지만, 내부에서 nil 을 찾으면 사용한 함수, 루프 또는 조건을 종료할 수 있습니다.

 

guard letif let과 비슷하지만 다른 점이 있습니다.

 

guard라는 것은 지키다 라는 뜻처럼, guard 문은 특성상 함수(메서드)에서만 쓰이며, guard구문의 조건을 만족하지 못하면 else문으로 빠져서 함수의 실행을 종료 시킬 때 사용합니다.

 

즉, 이런식으로 가드하는 것이죠.

"이 조건 만족 못하면 내 함수에서 나가!"

조건을 만족하지 못하면 내쳐버리는 것이 바로 guard문의 특징입니다. 따라서 guard 구문은 else 와 쌍으로 다닙니다. 왜냐하면 조건 못지키면 else에서 return 을 사용해야 하기 때문이죠.

TIP
 
 

if letguard let의 주요 차이점은 unwrapping 옵셔널도guard 코드 후에도 계속 사용할 수 있다는 것입니다

예를들어, greet() 함수를 사용해 보겠습니다.

이것은 optional string 을 유일한 매개 변수로 받아들이고 그것을 unwrap 할 것입니다. 그러나 그 안에 아무것도 없으면 메시지를 출력하고 빠져나올 것입니다.

가드를 사용하여 unwrapping 옵셔널도gurad가 끝난 후에도 머물러 있기 때문에 함수 끝에 unwrapping 된 문자열을 인쇄 할 수 있습니다.

func greet(_ name: String?) {
    guard let unwrapped = name else {
        print("You didn't provide a name!")
        return
    }

    print("Hello, \(unwrapped)!")
}

guard let을 사용하면 하면 함수 시작시 문제를 처리 한 다음 즉시 종료 할 수 있습니다.

예시

func double(number: Int?) -> Int? {
	guard let number = number else {
		return nil
	}
	return number * 2
}
let input = 5
if let doubled = double(number: input) {
	print("\(input) doubled is \(doubled).")
}
func add3(to number: Int) -> Int {
	guard let number = number else {
		return 3
	}
	return number + 3
}
guard let added = add3(to: 5)
print(added)

잘못된 예시

func playScale(name: String?) {
	guard let name = name {
		return
	}
	print("Playing the \(name) scale.")
}
playScale(name: "C")

//guard let 뒤에 else가 빠졌다.

 

가드 TEST문제를 풀려면 이곳을 클릭해주세요.

 

 

읽어주셔서 감사합니다🤟


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.