Swift - Protocol(3_Generic)

이한솔·2023년 9월 20일
0

Swift 문법 🍎

목록 보기
26/32

Protocol의 Generic

프로토콜에서 일반 제네릭을 사용할 때 처럼 사용하면 에러가 발생한다.

protocol Stack<T: Equatable> {         
// An associated type named 'T' must be declared in the protocol 'Stack' or a protocol it inherits
    func push(value: T)
    func pop() -> T
}


프로토콜에서 제네릭 사용 방법

  1. 프로토콜에서 제네릭을 사용하려면 associatedtype 을 사용해야 한다. 타입제약도 동일하게 사용 가능하다.
protocol Stack {
    associatedtype value
    
    func push(value: value)
    func pop() -> value
}
  1. 메소드는 기존에 제네릭 사용 방식으로 제네릭 함수를 선언할 수 있다.

protocol Stack {
    func push<T: Equatable>(value: T)
}


프로토콜 채택 시 사용 방법

  1. 프로토콜을 채택하는 곳에서 typealias를 이용해서
    associatedtype을 어떤 타입으로 사용할지 명시한다.
  2. typealias 없이 추론이 가능하게 작성하고 typealias를 생략한다.
struct IntStack: Stack {
    typealias value = Int
    
    func push(value: value) { }
    func pop() -> value { }
}

struct IntStack: Stack {
    func push(value: Int) { }
    func pop() -> Int { ... }
}

0개의 댓글