IdentifiedArrayOf란?

치킨치·2025년 4월 14일
0

IdentifiedArrayOf는 SwiftUI와 Composable Architecture(TCA)에서 자주 사용되는 컬렉션 타입으로,
Identifiable을 준수하는 요소들을 ID 기준으로 빠르게 접근하면서도 순서를 유지할 수 있는 하이브리드 컬렉션이다.

단순한 [Element] 배열이 아닌, 배열(Array) + 딕셔너리(Dictionary) 의 장점을 결합한 구조로,
다음과 같은 상황에서 매우 유용하게 사용된다:

  • TCA에서 ForEachStore와 함께 각 항목의 상태를 식별할 때
  • 특정 요소를 id로 직접 접근하고 싶을 때
  • 순서를 유지한 상태에서 CRUD 작업이 필요할 때

주요 기능

items.append(Item(id: UUID(), title: "첫 번째"))
items[id: someID]?.title = "수정됨"
items.remove(id: someID)
items.move(fromOffsets: source, toOffset: destination)
  • append : 요소 추가
  • id: 서브스크립트 : ID로 요소에 접근 (O(1))
  • remove(id:) : 특정 ID의 요소 삭제
  • move(...) : 배열 내부 순서 재조정

내부 구현 구조

IdentifiedArrayOf<Element>는 내부적으로 다음 두 구조를 동시에 유지한다:

struct IdentifiedArray<ID: Hashable, Element: Identifiable> {
    private var elements: [Element]
    private var idsToIndices: [ID: Int]
}
  • elements: 실제 데이터를 담고 있는 배열

  • idsToIndices: 빠른 ID 접근을 위한 해시 맵

    이 덕분에 id 기반 접근은 빠르게(O(1)), 순서 있는 렌더링도 가능하다.


기본 선언 예시

import ComposableArchitecture

struct Item: Identifiable, Equatable {
    var id: UUID
    var title: String
}

#### var items: IdentifiedArrayOf<Item> = []

사용 시 주의점

•	요소가 Identifiable을 충실히 구현하고 있어야 한다.
•	id 중복이 있을 경우 잘못된 결과를 유발하거나 크래시 날 수 있다.
•	대량의 요소에 대해 빈번한 삭제/이동이 필요하다면 성능을 고려해 별도 최적화가 필요할 수 있다.

결론

IdentifiedArrayOfTCA에서 식별성과 순서를 동시에 보장하는 컬렉션으로,
뷰 상태 관리, 상태 업데이트, 뷰 렌더링의 성능 최적화에 매우 적합하다.
특히 ForEachStore, id 기반 작업, 상태 추적이 중요한 구조에서 필수적이다.

profile
풀스텍이었던 iOS개발자

0개의 댓글