반응형

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. 참고 링크

  1. Swift Standard Library – Collection.isEmpty
  2. Swift.org – API Design Guidelines
  3. Swift by Sundell – Count vs isEmpty
  4. SwiftLint Rule – empty_count

 

반응형
Posted by 까칠코더
,