| 구분 |
if let |
guard else |
| 목적 |
옵셔널 값을 안전하게 추출하여 조건부로 코드 실행 |
옵셔널 값을 안전하게 추출하고 조건 불만족 시 빠르게 함수를 종료 |
| 사용 위치 |
함수 내 어디서든 사용 가능 |
주로 함수의 시작부분에서 사용하여 초기 조건을 검증 |
| 스코프 |
바인딩된 변수는 if 블록 내에서만 사용 가능 |
바인딩된 변수는 guard 이후의 코드 전체에서 사용 가능 |
| 가독성 |
중첩 사용 시 가독성 저하 가능 |
조건 불만족 시 명확하게 초기에 처리하여 가독성 향상 |
| 제어 흐름 |
else 블록에서 다른 로직 수행 가능 |
else 블록 내에서는 함수를 벗어나야 함 (예: return, continue, break, throw) |
| 사용 |
조건부로 복잡한 로직을 수행할 때 사용 |
필수 조건을 검사하고 조건이 충족되지 않을 때 함수 종료 필요할 때 사용 |
| 장단점 |
장점: 특정 조건에서만 실행하려는 코드 블록에 적합 단점: 중첩되면 가독성이 떨어짐 |
장점: 코드의 안전성을 높이고 초기에 실패 조건을 명확히 처리 단점: 항상 함수를 종료하거나 루프를 벗어나야 함 |
| 예시 |
if let 사용: 닉네임이 있을 때만 출력 |
guard else 사용: 입력 검증 후 조건 불충족 시 함수 종료 |
예제
if let
func nickname(from 데이터: [String: String?]) {
if let 별명 = 데이터["nickname"] {
print("별명: \(별명)")
} else {
print("별명 제공 X.")
}
}
guard else
func enter(input: String?) -> Bool {
guard let 입력데이터 = input, !입력데이터.isEmpty else {
print("유효하지 않은 입력.")
return false
}
// 입력이 유효한 경우 추가 로직 수행
return true
}
단점: 중첩되면 가독성이 떨어짐
단점: 항상 함수를 종료하거나 루프를 벗어나야 함
예제
if letguard else