[swift] 프로토콜의 연관 타입 (associated types) 사용법
프로토콜은 특정 작업 또는 기능에 필요한 메서드, 속성 및 기타 요구 사항의 청사진을 제공합니다. 프로토콜을 정의할 때 연관 타입을 사용하여 특정 연관 타입이 어떤 타입인지 프로토콜 내에서 정의할 수 있습니다. 이 연관 타입은 프로토콜을 채택하는 컨테이닝 타입에 따라 실제 타입으로 대체되며, 제네릭 타입을 선언할 때 유용하게 활용됩니다.
연관 타입 정의하기
프로토콜 내에 연관 타입을 정의할 때는 associatedtype
키워드를 사용합니다.
protocol Container {
associatedtype Item
func addItem(_ item: Item)
var count: Int { get }
}
위의 예시에서 Container
프로토콜은 Item
이라는 연관 타입을 가지고 있습니다. 이렇게 연관 타입을 정의함으로써 Container
프로토콜을 채택하는 구조체나 클래스에서 실제 타입을 지정할 수 있습니다.
연관 타입 사용하기
연관 타입을 사용하는 예시로 구조체 Stack
을 구현해보겠습니다.
struct Stack<T>: Container {
typealias Item = T
var items = [T]()
mutating func addItem(_ item: T) {
items.append(item)
}
var count: Int {
return items.count
}
}
위의 예시에서 Stack
구조체는 Item
을 T
로 대체하여 Container
프로토콜을 채택하고 있습니다. 이제 Stack
구조체는 addItem
메서드와 count
속성을 가져야 합니다.
결론
프로토콜의 연관 타입은 제네릭이나 일반적인 타입을 사용하는 곳에 유용하게 활용될 수 있습니다. 연관 타입을 사용하여 프로토콜을 보다 유연하게 정의하고, 프로토콜을 채택하는 타입에서 실제 타입을 지정할 수 있습니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다.