Guard Let
Coddy Swift 여정의 기초 섹션에 포함된 레슨 — 86개 중 13번째.
if let이 옵셔널을 추출하고 값이 존재할 때 코드를 실행하는 반면, guard let은 반대의 접근 방식을 취합니다. 즉, 값이 없을 때 조기에 종료합니다. 이는 특히 "잘못된" 경우를 먼저 처리하고 메인 로직을 깔끔하게 유지하려는 함수 내부에서 유용합니다.
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}
greet(name: "Taylor") // 안녕하세요, Taylor!
greet(name: nil) // 이름이 제공되지 않았습니다guard let 구문은 name에 값이 있는지 확인합니다. 값이 없으면, else 블록이 실행되고 함수는 return과 함께 종료됩니다. 옵셔널에 값이 포함되어 있으면, unwrappedName으로 언래핑됩니다. 그리고 여기서 if let과의 핵심적인 차이점이 나타납니다: 언래핑된 변수는 단지 블록 내부가 아니라 함수의 나머지 부분 전체에서 사용할 수 있게 유지됩니다.
이 "조기 종료(early exit)" 패턴은 에러 케이스를 미리 처리함으로써 코드를 읽기 쉽게 유지하며, 메인 로직이 여러 개의 if 문 안에 중첩되지 않도록 합니다.
챌린지
쉬움선택적(optional) age 파라미터를 받고 guard let을 사용하여 이를 안전하게 추출(unwrap)하는 validateAge 함수를 작성하세요.
만약 age가 nil이면, "Invalid age"를 반환하세요. 그렇지 않으면, "Age: [value]"를 반환하며 여기서 [value]는 추출된 나이 값입니다.
파라미터:
age(Int?): 사람의 나이를 나타내는 선택적 정수
반환값: 문자열 — 입력값이 nil인 경우 "Invalid age", 또는 추출된 값을 포함한 "Age: [value]".
예시: 만약 age가 25라면, "Age: 25"를 반환합니다. 만약 age가 nil이라면, "Invalid age"를 반환합니다.
치트 시트
guard let을 사용하여 옵셔널을 추출하고, 값이 없을 때 조기에 종료하세요:
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}guard let 문은 옵셔널에 값이 있는지 확인합니다. 값이 없으면 else 블록이 실행되고 return을 통해 함수를 종료합니다. 옵셔널에 값이 포함되어 있으면, 값이 추출되어 함수의 나머지 범위에서 사용할 수 있게 됩니다.
이 "조기 종료(early exit)" 패턴은 오류 케이스를 미리 처리하여, 메인 로직을 깔끔하고 들여쓰기 없이 유지해 줍니다.
직접 해보기
func validateAge(age: Int) -> String {
// 여기에 코드를 작성하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.