개발 관련/iOS SWIFT

[Swift] Associated Type 이란?

magpiebros 2023. 4. 5. 17:56
반응형

안녕하세요. 맥파이 입니다.

오늘은 Associated Type를 파헤질 예정입니다.

 

Associated Type은 프로토콜에서 사용됩니다.
Associated Type은 프로토콜을 위한 Generic이라고 생각하시면 됩니다.
Generic에 대해서도 정리가 필요해 보입니다.


프로토콜 잘 모르시겠나요?

아래 링크로 학습을 해보시죠!!

2023.04.05 - [iOS 개발/swift] - [Swift] Protocol 프로토콜이란?

 

 

Associated Type

protocol MagpieProtocol {
    var value: String { get }
}

MagpieProtocol을 채택하는 타입은 value를 정의해 주어야 합니다.
현재는 value는 String값입니다.
Int값이 있는 value가 필요하다면 어떻게 할까요?

 

이렇게 정의하면 됩니다.

protocol MagpieIntProtocol {
    var value: Int { get }
}

참 쉽죠?

 

하지만, 이렇게 정의해서 쓰다가는 코드는 누더기가 되어 버릴겁니다. 
Int, Float, String… etc
이럴때 사용하는게 Associated Type이라고 합니다.
사실 저도 잘 쓰진 않아요.
이제 잘 쓸수 있도록 노력할거에요.

 

자 만들어 보겠습니다.

protocol MagpieIntProtocol {
    associatedtype MagpieType
    var value: MagpieType { get }
}

짜잔!

사용을 한번 해보지요..

class A: MagpieIntProtocol {
    var value: Int = 30
    typealias MagpieType = Int
}

   
typealias MagpieType = Int 를 설정해줌으로서 value의 타입이 결정되었습니다.
Generic과 동일한 기능이라고 볼수 있겠죠?


그럼 여기서 축약을 해보죠.

class A: MagpieIntProtocol {
    var value: Int = 30
}

짜잔!!

 


컴파일해보면 정상으로 동작합니다.
내부 동작은 모르겠으나, 아마 추론을 했을것으로 추측됩니다.

associatedtype에 대해서는 여기서 마쳐도 될것 같습니다.

제약도 한번 정리해봐야 할것 같네요.

해야 할것들이 떠오르지만... 언제 해야할지는 모르겠습니다.

추가 정보

associatedtype은 프로토콜이 적용될때까지 지정되지 않습니다.

그냥 이런게 있을꺼니까 오빠만 믿고 빌드 전까지 의심하지마~

이런거라고 생각해주세요

 

오늘도 즐거운 학습이였습니다.

또 만나요!!


 

반응형