티스토리 뷰

위의 그림과 같이 프로토콜을 두개 만들어준다. MyProtocol이라는 protocol은 myVar라는 변수를 property로 가지고 있어야하며 myVar는 MyVarClassProtocol이라는 프로토콜을 채택한다.

MyVarClassProtocol이라는 프로토콜은 name이라는 String타입 property가 있어야한다

이제 MyVarClass라는 MyVarClassProtocol을 채택하는 class를 만들어주고

MyClass라는 MyProtocol을 채택하는 class를 만들어주자.

MyVarClass에는 name을 출력해주는 printName이라는 함수가 존재한다.

 

MyClass를 마저 작성하려했더니..

...안된다..

에러메시지를 보니 MyClass가 MyProtocol을 준수하지 않았다고 한다.

MyVarClass타입이 MyVarClassProtocol을 채택하기때문에 문제가 없을 줄 알았다.

 

자동완성을 하니 MyVarClassProtocol 자체가 나와버린다.

나는 MyVarClass타입의 myVar를 만들어주고싶은데...

 

이렇게 되면 printName함수를 실행시킬 수 없다..

위의 MyClass의 myVar프로퍼티 타입이 프로토콜로 들어있어서 기분나쁜건 덤..

물론 이렇게 강제로 형변환을 해주어서 함수를 사용 할 수는 있긴 있다..

근데 뭔가 이건 아닌것같다

 

이럴땐 위의 MyProtocol 프로토콜에 associcatedtype을 이용해보자

저렇게 구현을 해주게 되면 원래 의도한대로 myVar는 MyVarClassProtocol을 채택하는 property라고 한정되어진다.

그 후 MyClass에서 MyVarType이 정확히 어떤 타입인지 지정해주고

원래 의도했던대로 작성해주면

아주 깔끔하게 작성되고 돌아가는 모습을 볼 수 있다.

 

예제코드 : 

github.com/HanweeeeLee/TestModules/blob/master/Protocol%26associatedTypeExample/Protocol%26associatedTypeExample.playground/Contents.swift

'프로그래밍 > Swift' 카테고리의 다른 글

RxSwift를 이용해 클로저 지옥 탈출하기  (0) 2022.05.22
"Delegate" VS "Parents Object"  (0) 2021.07.26
Optional 과 == 연산자  (0) 2020.11.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함