[Swift] Associated Type

호랭이·2022년 6월 16일
0

🍎 Swift

목록 보기
9/13

프로젝트를 진행하면서 프로토콜을 쓸 일이 종종 있었는데 이런 의문점이 들었다.

이 타입들은 내부 프로퍼티 용도나 이름도 동일한고 같은 목적의 메소드를 사용하는데 내부 프로퍼티 타입만 다르네...다른 건 이 프로퍼티 타입 뿐인데 얘네들을 하나의 프로토콜로 묶어서 쓸 수 없을까?🧐

구글링을 해봤더니 역시 똑똑한 Swift는 가능했다!!!푸하하

바로

Associated Type

을 사용하면!

일단 이 타입은 프로토콜에서 사용되는 타입이다.(당연함)

Protocol ConvertProtocol {
	var key: String { get }
    
    func seachValue() {}
 }

위와 같은 프로토콜을 사용할 때, 어떤 타입에서는 key를 String 타입으로 사용하지만, 어떤 타입에서는 Int 타입으로 사용하고 싶다면?

이런 경우에 Associated Type을 사용할 수 있다.

protocol ConvertProtocol {
	associatedtype MyType
	var key: MyType { get }    
}

위와 같이 Associated Type을 이용해서 프로토콜을 정의하면

struct A: ConvertProtocol {
	var key: String {
  return "a"
  }
}
struct B: ConvertProtocol {
	var key: Int {
   return 1
   }
}

이렇게 프로퍼티의 타입을 다르게 사용하는 것이 가능하다!
즉, 실제로 프로토콜이 적용될 때 타입이 결정되는 것이다.
마치 Generic과 비슷하군🤔

프로퍼티에 제약을 주는 것도 가능하다.

assciatedtype MyType: Equatable

위와 같이 제약을 준다면 MyType을 사용하는 프로퍼티는 Equatable을 준수하는 타입만을 채택할 수 있는 것이다.

profile
삐약

0개의 댓글