Swift에서 count > 0 대신 isEmpty를 사용하는 이유
1. 개요
Swift 언어는 코드의 의도를 명확하게 표현하는 것을 핵심 철학으로 합니다.
WWDC 2015 세션 “Swift API Design Guidelines”에서 Apple 엔지니어들은 다음 원칙을 강조했습니다.
“Write code that expresses intent clearly and concisely. Prefer clarity to cleverness.”
따라서 배열이나 컬렉션의 비어 있음 여부를 확인할 때는 isEmpty가 Swift 철학에 부합하는 표현입니다.
2. Apple 공식 문서 인용
“When you need to check whether your collection is empty, use its isEmpty property instead of comparing the count property to zero.”
— Apple Developer Documentation, Swift Collection.isEmpty
Swift 표준 라이브러리의 Collection 프로토콜 문서에서도 이 점을 명확히 규정하고 있습니다.
즉, Swift 2.0(WWDC 2015 이후)부터 공식적으로 isEmpty 사용이 권장되었습니다.
3. Swift API Design Guidelines
Apple은 다음과 같은 설계 원칙을 제시했습니다.
| 원칙 | 설명 |
| 명확성(Clarity) | 코드는 누구나 읽기 쉽게 작성되어야 한다. |
| 일관성(Consistency) | 동일한 개념은 동일한 방식으로 표현해야 한다. |
| 간결성(Conciseness) | 불필요한 복잡성을 피하고 의도를 드러내야 한다. |
isEmpty는 이러한 철학을 반영하는 대표적인 예시입니다.
4. 의미적 차이 (Semantic Difference)
| 표현 | 의미 | 가독성 | Swift 철학 부합 |
| items.count > 0 | 요소 개수가 0보다 크다 | 낮음 | ❌ |
| !items.isEmpty | 비어 있지 않다 | 높음 | ✅ |
isEmpty는 코드의 논리적 의도를 그대로 전달하기 때문에 협업이나 코드 리뷰 시 이해가 훨씬 빠릅니다.
5. 성능 차이 (Performance Difference)
Swift의 Collection 프로토콜 문서에 따르면:
Accessing the count property requires traversing the entire collection if the collection does not conform to RandomAccessCollection.
즉, 다음과 같습니다.
타입.count.isEmpty복잡도
| 타입 | .count | .isEmpty | 복잡도 |
| Array, Set, Dictionary | O(1) | O(1) | 동일 |
| LazyCollection, LinkedList 등 | O(n) | O(1) | isEmpty 우위 ✅ |
isEmpty는 내부적으로 첫 요소 존재 여부만 검사하므로 항상 빠르고 효율적입니다.
6. 코드 예시
✅ 권장
let users = ["Alice", "Bob"]
if !users.isEmpty {
print("총 \(users.count)명의 사용자가 있습니다.")
}
🚫 비권장
if users.count > 0 {
print("총 \(users.count)명의 사용자가 있습니다.")
}
7. SwiftLint 규칙 (자동 검사)
SwiftLint는 .count > 0 또는 .count == 0 사용 시 경고를 표시합니다.
opt_in_rules:
- empty_count
경고 메시지 예시:
“Prefer isEmpty over comparing count to zero.”
8. Apple이 강조한 코드 철학 요약
| 항목 | 원칙적용 | 예 |
| 명확한 의도 표현 | 코드가 “무엇을 하는지”보다 “왜 하는지” 드러내야 함 | isEmpty |
| 자연스러운 언어 표현 | 영어 문장처럼 읽히는 코드 | if list.isEmpty {} |
| 일관된 API 설계 | 모든 컬렉션 타입에서 동일한 검사 방식 | isEmpty |
| 효율적 추상화 | 구현체별로 O(1) 보장 | count는 일부에서 O(n) |
9. 결론
| 항목 | count > 0 | !isEmpty |
| 의미 명확성 | 낮음 | 높음 ✅ |
| 성능 안정성 | O(1) ~ O(n) | 항상 O(1) ✅ |
| Swift 가이드라인 | 비권장 | 권장 ✅ |
| SwiftLint 검사 | 경고 발생 | 정상 ✅ |
| WWDC 2015 철학 반영 | ❌ | ✅ |
따라서 Swift에서는 배열이나 컬렉션의 상태를 검사할 때 항상 isEmpty를 사용하는 것이 권장됩니다.
10. 참고 링크
- Swift Standard Library – Collection.isEmpty
- Swift.org – API Design Guidelines
- Swift by Sundell – Count vs isEmpty
- SwiftLint Rule – empty_count
'Dev Study > Swift' 카테고리의 다른 글
| Swift에서 map vs forEach (0) | 2025.11.11 |
|---|---|
| Swift에서 Lazy 컬렉션 (0) | 2025.11.10 |
| Swift에서 contains(where:) vs filter().count > 0 (0) | 2025.11.10 |
| Swift에서 for-in vs 인덱스 기반 반복(0..<array.count) (0) | 2025.11.10 |
| Swift 6.1 기능 정리 (0) | 2025.11.10 |
| Swift 6.0 기능 정리 (0) | 2025.11.10 |
| Swift Throttle vs Debounce 완벽 가이드 (1) | 2025.11.07 |
| Swift class vs final class 비교 (0) | 2025.11.07 |

