Swift에서 Identifiable 프로토콜을 사용하는 방법! 쉬운듯 어려운듯?

작성일 :

Swift에서 Identifiable 프로토콜을 사용하는 방법

Swift의 Identifiable 프로토콜은 SwiftUI와 함께 사용될 때 매우 유용한 기능을 제공합니다. 이 프로토콜은 컬렉션의 각 요소를 고유하게 식별할 수 있게 해주며, SwiftUI에서 목록을 효율적으로 관리하는 데 중요한 역할을 합니다. 이 글에서는 Identifiable 프로토콜의 기본 개념, 사용법, 그리고 실용적인 예제를 통해 이 프로토콜을 자세히 설명하겠습니다.

1. Identifiable 프로토콜의 이해

Identifiable 프로토콜은 Swift의 표준 라이브러리에서 제공되며, 특정 유형의 객체가 고유 식별자를 가지고 있음을 나타냅니다. 이 프로토콜은 주로 SwiftUI에서 리스트나 컬렉션 뷰를 다룰 때 사용됩니다. Identifiable 프로토콜을 채택한 객체는 고유한 id 속성을 가져야 합니다.

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

2. Identifiable 프로토콜 구현

기본적인 사용 예

기본적으로 Identifiable 프로토콜을 사용하려면, 해당 객체에 id 속성을 추가해야 합니다. 예를 들어, Person 구조체를 만들고 이를 Identifiable 프로토콜에 적합하게 만들 수 있습니다.

swift
struct Person: Identifiable {
    var id: UUID
    var name: String
    var age: Int
}

이 예제에서 Person 구조체는 UUID 타입의 id 속성을 가지며, 이는 고유 식별자로 사용됩니다.

자동 ID 생성

Swift에서는 id 속성을 명시적으로 지정하지 않아도, Identifiable 프로토콜을 자동으로 구현할 수 있는 편리한 방법이 있습니다. 만약 id 속성을 생략하고, 다른 속성을 ID 타입으로 설정하면 됩니다.

swift
struct Person: Identifiable {
    var id = UUID() // 자동으로 UUID 생성
    var name: String
    var age: Int
}

커스텀 ID 속성

기본 타입이 아닌 커스텀 타입의 ID를 사용하고자 할 때는, 직접 ID 타입을 정의할 수 있습니다.

swift
struct Book: Identifiable {
    var id: String
    var title: String
    var author: String
}

3. Identifiable와 SwiftUI

Identifiable 프로토콜은 SwiftUI에서 목록을 생성하고 관리하는 데 특히 유용합니다. SwiftUI의 List 뷰는 Identifiable 프로토콜을 준수하는 데이터 컬렉션을 사용하여 각 행을 고유하게 식별할 수 있습니다.

List 사용 예

swift
import SwiftUI

struct Person: Identifiable {
    var id = UUID()
    var name: String
    var age: Int
}

struct ContentView: View {
    let people = [
        Person(name: "Alice", age: 25),
        Person(name: "Bob", age: 30),
        Person(name: "Charlie", age: 35)
    ]

    var body: some View {
        List(people) { person in
            Text("\(person.name), \(person.age) years old")
        }
    }
}

위 코드에서는 List 뷰가 Identifiable 프로토콜을 준수하는 Person 객체의 배열을 사용하여 각 행을 생성합니다. List 뷰는 id 속성을 사용하여 각 Person 객체를 고유하게 식별합니다.

ForEach와 Identifiable

ForEach 뷰를 사용하여 동적 뷰 생성을 할 때도 Identifiable 프로토콜을 사용할 수 있습니다.

swift
import SwiftUI

struct ContentView: View {
    let people = [
        Person(name: "Alice", age: 25),
        Person(name: "Bob", age: 30),
        Person(name: "Charlie", age: 35)
    ]

    var body: some View {
        VStack {
            ForEach(people) { person in
                Text("\(person.name), \(person.age) years old")
            }
        }
    }
}

이 예제에서도 ForEach 뷰가 Identifiable 프로토콜을 준수하는 Person 객체의 배열을 사용하여 각 텍스트 뷰를 생성합니다.

4. Identifiable 프로토콜의 장점

  • 코드 간결성: Identifiable 프로토콜을 사용하면 고유 식별자를 쉽게 정의할 수 있어 코드가 간결해집니다.
  • SwiftUI 통합: SwiftUI의 ListForEach와 같은 뷰와 자연스럽게 통합되어 동적 목록을 쉽게 관리할 수 있습니다.
  • 유지보수성: 고유 식별자를 통해 데이터의 변화와 상태를 명확하게 관리할 수 있어 코드의 유지보수성이 높아집니다.

결론

Swift의 Identifiable 프로토콜은 고유 식별자를 통해 객체를 관리하고, SwiftUI와의 통합을 통해 동적 목록을 효율적으로 처리할 수 있는 강력한 도구입니다. 다양한 예제를 통해 Identifiable 프로토콜의 사용법을 익히고, 실제 프로젝트에서 이를 활용하여 더욱 간결하고 유지보수하기 쉬운 코드를 작성해 보세요.

더 많은 정보는 🔗 Apple Developer Documentation에서 확인할 수 있습니다.