본문 바로가기
Category/iOS

Identifiable이란?

by Corinee 2024. 9. 22.
728x90
반응형

Identifiable은 SwiftSwiftUI에서 사용하는 프로토콜로, 데이터 객체에 고유한 식별자를 제공하여, 컬렉션 내에서 각 객체를 고유하게 식별할 수 있게 합니다. 특히 리스트, 그리드와 같은 SwiftUI의 동적 뷰 구성에서 데이터 항목을 구분할 때 매우 유용하게 사용됩니다.

1. Identifiable 프로토콜 개념

Identifiable 프로토콜은 객체가 고유한 ID를 가져야 함을 보장합니다. 이 프로토콜을 채택하면 id라는 속성을 제공해야 하며, 이 속성을 통해 객체를 고유하게 식별할 수 있습니다.

protocol Identifiable {
    associatedtype ID: Hashable
    var id: Self.ID { get }
}

2. 사용 목적

  • SwiftUI의 리스트나 ForEach에서 사용: SwiftUI의 List나 ForEach와 같은 뷰는 내부적으로 객체를 식별하여 어떤 항목이 추가되었는지, 삭제되었는지, 업데이트되었는지 알아야 합니다. Identifiable을 채택하면 이러한 식별 작업이 쉬워집니다.
  • 객체 간 고유성 보장: 여러 객체가 존재할 때, 각 객체를 고유하게 구분하기 위해 사용됩니다.

3. 기본 사용법

Identifiable 프로토콜을 채택하려면, 구조체나 클래스에서 고유한 식별자를 제공해야 합니다. 주로 UUID나 숫자 같은 값이 사용됩니다.

예시 1: UUID를 사용한 Identifiable 채택

struct User: Identifiable {
    let id = UUID()  // 고유한 ID
    var name: String
}

위 예시에서 User 구조체는 Identifiable을 채택하고, 각 User 객체는 고유한 UUID를 가지게 됩니다.

예시 2: 특정 필드를 고유 ID로 사용하는 경우

struct Product: Identifiable {
    var id: Int  // 고유한 정수 ID
    var name: String
    var price: Double
}

여기서는 id 필드를 Int 타입으로 선언하여, 각각의 Product가 고유한 정수 식별자를 갖습니다.

4. SwiftUI에서의 사용

SwiftUI에서 동적인 리스트ForEach 구문을 사용할 때, 데이터 항목을 고유하게 식별할 수 있어야 합니다. Identifiable을 채택하면 SwiftUI는 각 항목을 쉽게 식별할 수 있습니다.

예시: List와 Identifiable

struct ContentView: View {
    let users = [
        User(name: "Alice"),
        User(name: "Bob"),
        User(name: "Charlie")
    ]
    
    var body: some View {
        List(users) { user in
            Text(user.name)
        }
    }
}
  • User가 Identifiable을 채택했기 때문에, List는 각 User를 고유하게 식별하고 효율적으로 관리할 수 있습니다.
  • 각 항목은 id를 통해 고유하게 구분되므로, SwiftUI는 항목이 추가되거나 삭제될 때 이를 인식하여 적절하게 뷰를 업데이트합니다.

예시: ForEach와 Identifiable

struct ContentView: View {
    let products = [
        Product(id: 1, name: "Laptop", price: 999.99),
        Product(id: 2, name: "Phone", price: 799.99),
        Product(id: 3, name: "Tablet", price: 499.99)
    ]
    
    var body: some View {
        ForEach(products) { product in
            Text("\(product.name): $\(product.price)")
        }
    }
}
  • Product 구조체가 Identifiable을 채택하여, ForEach에서 각 제품을 고유하게 식별하고 화면에 그립니다.

5. Identifiable이 없는 경우

만약 데이터가 Identifiable을 채택하지 않았다면, ForEach나 List에서 고유한 필드를 수동으로 지정해주어야 합니다.

struct ContentView: View {
    let products = [
        Product(id: 1, name: "Laptop", price: 999.99),
        Product(id: 2, name: "Phone", price: 799.99),
        Product(id: 3, name: "Tablet", price: 499.99)
    ]
    
    var body: some View {
        ForEach(products, id: \.id) { product in
            Text("\(product.name): $\(product.price)")
        }
    }
}
  • 여기서 id: \.id는 고유 식별자로 사용할 필드를 명시적으로 지정하는 방법입니다.

6. 요약

  • Identifiable은 SwiftUI에서 객체를 고유하게 식별하기 위한 프로토콜입니다.
  • 객체가 Identifiable을 채택하면, 고유 식별자(id)를 제공해야 합니다.
  • SwiftUI의 List, ForEach 같은 뷰에서 동적 항목을 효율적으로 관리하고, 각 객체를 고유하게 처리할 수 있게 도와줍니다.
  • 고유 식별자는 UUID, 정수, 문자열 등 다양한 값이 될 수 있습니다.

Identifiable을 사용하면 SwiftUI에서 상태 변화를 감지하고 자동으로 UI를 업데이트하는 데 매우 유용하며, 리스트나 데이터 관리가 훨씬 간결해집니다.

'Category > iOS' 카테고리의 다른 글

Spacer()란?  (0) 2024.09.23
@FocusState란?  (0) 2024.09.23
@EnvironmentObject란?  (0) 2024.09.22
NavigationStack이란?  (1) 2024.09.22
ZStack이란?  (0) 2024.09.22