-
Swift - Associated TypeProgramming/Swift 2022. 1. 19. 22:30
안녕하세요 BeePeach입니다 :)
오늘 공부해볼 내용은 Generic과 관련된 Associated Type입니다.
Generic을 이용하면 여러 Type에 호환이 가능한 Function, Custom Type을 만들 수 있었습니다.
이렇게 강력한 기능을 Protocol에서도 사용하고 싶을 때 Associated Type을 이용합니다.
Associated Type
Protocol에서도 타입 파라미터를 사용하면 안될까요??
한번 사용해보도록 하겠습니다.
타입 파라미터를 사용했더니 protocol에서는 사용할 수 없다는 에러가 발생합니다.
그럼 어떻게 Type으로 사용될 placeholder를 지정할 수 있을까요??
associatedtype 키워드 뒤에 placeholder로 사용될 Type Name을 적어주면 됩니다.
예제에서는 Element가 타입 파라미터와 같은 기능을 하게 됩니다.
Element는 어떠한 Type이 와도 되지만 반드시 append(_:) 메서드의 파라미터와 subscript의 return Type은 반드시 같아야해! 라는 의미가 됩니다.
사용하기
associatedtype을 이용한 protocol을 채용하고 필수 요구사항을 구현할때는 associatedtype으로 지정한 Type name을 그대로 사용한다면 당연히 에러가 발생하겠죠?
예를 들어 위 예시의 Element는 placeholder일 뿐이지 진짜 존재하는 Type이 아닙니다.
그래서 protocol을 채용하고 필수 요구사항을 구현할때는 Type을 특정해줘야 합니다.
지난 포스팅에서 사용했던 IntStack이 Container 프로토콜을 채용하도록 구현했습니다.
위 코드를 보면 Element로 된 부분이 모두 Int로 특정된 것을 확인할 수 있습니다.
만약 Element라는 것을 그대로 사용하고 싶다면 어떻게 해야 할까요??
위 코드와 차이가 없는 것 같지만 잘 보면 맨 위에 typealias를 통해서 Element를 Int로 인식하도록 했습니다.
그 결과 필수 요구사항인 append(_:)와 subscript에서 Element를 그대로 사용해도 에러가 나지 않는 것을 확인할 수 있습니다.
두 방법 중에 원하는 방법을 사용하면 됩니다.
마지막으로 Element란 이름을 그대로 사용하고 싶다면 이전 포스팅에서 Stack을 Generic Type으로 구현한 것처럼 타입 파라미터를 Element로 해주면 됩니다.
타입 파라미터와 프로토콜의 associated type을 혼합해서 이렇게 Type에 상관없이 유연한 코드를 작성할 수 있습니다.
참고 자료
https://docs.swift.org/swift-book/LanguageGuide/Generics.html
Generics — The Swift Programming Language (Swift 5.5)
Generics Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can write code that avoids duplication and expresses its intent in a clear, abstracted manner. Gener
docs.swift.org
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Generic Type Constraint (0) 2022.01.25 Swift - Generic Type 확장하기 (0) 2022.01.24 Swift - Generic Type (0) 2022.01.18 Swift - Generic (0) 2022.01.17 Swift - Hashable Protocol (0) 2022.01.16