티스토리 뷰

반응형

 

오늘은 Udemy강의에서 다뤘던 내용을 복습하는 차원에서 swift의 Protocol에 associatedtype을 지정하고 활용하는 방법과 associatedtype에 대한 제약을 주는 방법도 알아보겠습니다.

참고한 강의 reference는 아래 링크를 참고해주세요.
https://www.udemy.com/course/swift-for-intermediate-and-advanced-ios-developers/

 


swift protocol, associatedtype 연관타입 정의 및 사용방법

Parser라는 protocol이 정의되어있습니다. 그리고 그 내부를 보시면 Input, Output 타입이 associatedtype으로 지정되어있습니다. 그리고 Input, Output을 사용하는 parse 라는 메서드가 있네요.

Input, Output은 해당 프로토콜 규약 내에서 사용되며, 채택한 곳에 따라 유연하게 그 타입이 변경될 수 있습니다. 그 과정을 이어서 보겠습니다.

 

 

NetParser는 Parser protocol을 채택하고 있습니다. 이어서 typealias 키워드와 함께 Input, Output타입을 특정 타입으로 정의해주고 있죠.

위와 같이 protocol 정의가 되는경우, NewParser 클래스에서의 Input 타입은 String, Ouput 타입은 [String: String]이 되는 것입니다. 

자연스럽게 Input, Output 타입을 사용하는 parse 메서드도 이런 규칙을 따르게 되는 것이죠.

 


generic(제네릭타입)과 where 절을 이용하여 associatedtype(연관타입) 제약 조건 주는 방법

runParse는 제네릭타입을 사용하고 있습니다. Parser 프로토콜을 준수하는 parser를 인자로 받고, 이어서 inputs는 [P.Input]으로 명시가 되어있죠. 우측에는 이어서 where 절이 명시되어있습니다.

where P.Input == NewParser.Input 은 Parser의 associatedtype이 NewParser의 Input 타입과 동일한 경우에 한하여 해당 메서드를 사용 가능하도록 제약을 준 것입니다.

 

 

test 메서드를 보면, NewParser 인스턴스를 생성하고 인스턴스와 inputs 인자를 넘겨서 runParse를 실행하고 있습니다.

NewParser의 Input 타입은 String 타입으로 정의가 되었었지요. 그렇기 때문에 inputs 레이블에는 [String] 타입을 넘겨주어야 합니다.

 


오늘은 protocol의 associatedtype을 사용하는 예시를 한가지 보았고, 이어서 where 절, generic type(제네릭 타입), associatedtype(연관 타입) 등을 함께 사용하여 특정 메서드에 사용될 수 있는 타입에 대한 세부 제약을 주는 방법도 알아보았습니다. 

많은 의견, 피드백 부탁드립니다. 감사합니다!

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함