Programing Langauge/swift

protocol 학습하기 (3) [ associatedtype ]

Hamp 2024. 8. 25. 15:50
반응형

 

저번 포스팅에서 프로토콜의 generic합성, 채택 체크등 조금 더 확장된 개념을 학습했다.

이번에는 저번 학습 주제 중 generic을 프로토콜에서 편하게 사용할 수 있는
associatedtype에 대해 학습해보자

등장 배경

프로토콜에서 generic 사용할 때 번거로움이 있다.

왼쪽 사진과 같이 프로토콜 자체에 제네릭을 선언할 수 없고 
만약 제네릭을 사용하고 싶으면  오른쪽 사진과 같이 타입이더라도  함수 하나하나 새로 명시를 해줘야한다.

 

역할

프로토콜에 사용하는 범용 타입의 역할을 한다.

 

특징

1) associatedtype 역시 제네릭과 마찬가지로 제약 조건을 줄 수 있다.
    여기서 제약조건이란 프로토콜 채택과 클래스 상속 등을 의미한디.

 

2) 채택 할 때 typealias를 이용하여 명확한 타입을 명시할 수 있다.

 

3) typealias 을 사용하지 않으면 명확한 타입을 따로 넣어준다.

 

 

예시 코드

protocol SomeProtocol {
    
    associatedtype T : Equatable // 제약 조건 도 줄 수 있음
    
    func f1(value: T) -> T
    
}

// typealias 이용 ✅
struct SomeStruct1: SomeProtocol {

    typealias T = Int
    
    func f1(value: T) -> T {
        return value
    }
    
}

// typealias 이용 ❌
struct SomeStruct2: SomeProtocol {
    func f1(value: Int) -> Int {
        return value
    }
}
반응형