[Swift] count(where:) - Swift 6부터!

성실한 베짱이·2025년 5월 27일

개요

Swift에는 🔗count(where:) 라는 메서드가 있다.
Sequence 프로토콜의 메서드인데, 공식 문서에 다음과 같이 정의되어있음.

func count<E>(where predicate: (Self.Element) throws(E) -> Bool) throws(E) -> Int where E : Error

구현은 🔗 다음과 같다.

extension Sequence {
  // ...
  public func count<E>(
    where predicate: (Element) throws(E) -> Bool
  ) throws(E) -> Int {
    var count = 0
    for e in self {
      count += try predicate(e) ? 1 : 0
    }
    return count
  }
}

문제

코딩 테스트 공부 중에, count(where:) 메서드를 사용하니 컴파일 에러가 나서 로컬 환경에서 실행해 보니 이때는 또 문제가 없었음.
나중에 알고보니, count(where:) 메서드가 Swift6에 추가된 문법이어서 그랬던 것.

(프로그래머스 코딩 테스트 에디터는 Swift 5.2.5 버전으로 컴파일한다. - 2025.05.27 기준)

생성형 AI도 몰랐다!

이 문제로 많이 헤맸던 이유가,
생성형 AI들한테 이 문제를 물어보니, 다들 엉뚱한 대답을 해서 6.0인 것을 알고도 스스로 확신하지 못했던 것 같다. (생성형 AI를 맹신하지 말자...)

우선 Gemini한테 물어보니, 다음과 같이 답변을 주었다. (2.5 Flash)
(심지어 처음에 잘못 말한 것 같아서 레퍼런스와 정확한 정보를 주고 다시 답변달라고 했는데도 다음과 같은 결과를 얻었음)

제공해 주신 정보에 따라 다시 확인해 보고 답변을 드립니다.

count(where:) 메서드의 Swift 버전 확인
먼저, count(where:) 메서드가 Swift 6부터 동작하는 것 같다는 말씀에 대해 다시 확인해 보았습니다.

결론부터 말씀드리면, count(where:) 메서드는 Swift 5.0부터 정식으로 지원됩니다.

뭔가 이상해서 chatGPT한테도 물어봤더니, 다음과 같은 답변을 얻었다. (4o)

✅ 1. Sequence.count(where:) 도입 버전

count(where:)는 Swift 5.4부터 공식적으로 도입되었어.
• 구체적으로는 Swift PR #34078을 통해 Sequence에 확장으로 추가되었고,
• Swift 5.4 릴리스 노트에도 간단하게 언급되어 있어.

즉, Swift 5.3 이하에서는 count(where:)는 사용할 수 없어.

심지어 chatGPT가 알려준 🔗 Swift PR #34078count(where:)과는 전혀 무관한 다른 PR 이었음.

chatGPT한테 다시 물어봐도 6.0이 맞다고는 해 주었으나, 엉뚱한 SE(Swift evolution) 문서를 알려주었다...

정리

SwiftSequence 프로토콜의 확장으로 기본 구현된 메서드인 count(where:)Swift 6부터 지원하는 메서드이다.

🔗 SE-0220 에서 확인할 수 있다.

또한, Swift 6의 🔗 Release Note 에도 명시되어 있는 부분이다.
(Language and Standard Library > Productivity enhancements)

결론, 느낀점

  • count(where:)Swift 6에서 새로 도입된 메서드이다.
  • 생성형 AI를 너무 맹신하지 말자.
    • 생성형 AI로 정보를 찾는다고 해도, 크로스 체크를 할 수 있어야 한다!
    • 생성형 AI가 최신 정보를 학습하지 못했을 수 있으니, 비교적 최신 정보인 경우, 한 번 더 의심해볼 것!
profile
print("Hello, Swift!")

0개의 댓글