프로토콜(Protocol)에서의 제네릭(Generics)

썹스·2022년 12월 4일
0

Swift 문법

목록 보기
46/68

프로토콜(Protocol)에서의 제네릭(Generics)

함수와 커스텀 타입(구조체, 클래스, 열거형)에서 제네릭을 구현하는 방법은 서로 비슷했지만, 프로토콜에서 제네릭을 구현하는 방법은 조금 다릅니다.

프로토콜의 제네릭 타입 구현은 프로토콜 내부에 "associatedtype" 키워드를 사용하여 타입 파라미터 "T"를 선언해야 합니다.

✅ 함수, 커스텀 타입, 프로토콜의 제네릭 타입 구현

//함수
func funcName<T>{ <관련 코드> }

//구조체
struct StructName<T>{ <관련 코드> }

//클래스
class ClassName<T>{ <관련 코드> }

//열거형(연관 값(Associated Value)을 가질 때만 제네릭으로 정의 가능)
enum EnumName<T>{ <관련 코드> }
//프로토콜
protocol ProtocolName{
    associatedtype T
    <관련 코드>
}

✅ 프로토콜(Protocol)에서의 제네릭(Generics) 활용

typealias T = String   // 타입 파라미터 T의 타입을 미리 정의

제네릭 프로토콜 타입을 채택하여 사용할 때는 미리 타입 파라미터를 정의하여 사용할 수 있습니다.

⬇️ 제네릭 프로토콜 타입을 사용한 예시

protocol ProductInformation{  // 제네릭 프로토콜 정의
    associatedtype T
    var productPrice: T?{get set}
    func pricePrint(price: T) -> T
}

struct TV: ProductInformation{
    typealias T = String   // 타입 파라미터 T의 타입을 미리 정의
    var productPrice: T?
    func pricePrint(price: T) -> T {
        return price
    }
}

struct Americano: ProductInformation{
    //typealias T = Type  // 생략 가능
    var productPrice: T?
    func pricePrint(price: Int) -> Int {
        return price
    }
}

var samsungTV = TV()  // samsungTV 인스턴스는 String 타입으로만 생성 가능합니다.
print(samsungTV.pricePrint(price: "백만원"))

var starbucksAmericano = Americano()  // starbucksAmericano 인스턴스는 Int 타입으로만 생성 가능합니다.
print(starbucksAmericano.pricePrint(price: 5000))


/* 출력 결과
 백만원
 5000
 */
profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글