제네릭Generics
제네릭
Write code that works for multiple types and specify requirements for those types. 여러 타입에 대한 동작을 작성하고 해당 타입의 요구사항을 지정합니다.
제네릭은 어떤 타입에도 대응할 수 있도록 해주는 스위프트의 기능이다. 제네릭 타입으로 함수를 정의하면 재사용도 용이하고, 코드의 중복을 줄이며 추상화할 수 있다. Swift의 많은 타입들이 제네릭을 통해 구현되어 있다. 대표적으로 콜렉션 타입들이 채택하고 있는 프로토콜인 Collection
부터가 제네릭을 사용하고 있다.
1
protocol Collection<Element> : [`Sequence`]
그렇다. 프로토콜에도 제네릭을 사용할 수 있다.
제네릭과 프로토콜을 함께 사용한다면, 제네릭을 통해 다양한 타입에 대한 유연성을 확보하는 동시에 어느 정도의 제약도 추가할 수 있다.
제네릭은 타입의 제한을 유연하게 해주고, 프로토콜은 타입의 유연성을 제한한다.
1
2
3
4
5
6
7
8
9
10
11
12
extension Array {
func myMap<T> (_ input: (Element) -> (T) -> [T] {
var mapped = [T]()
self.map { mapped.append(input($0)) }
return mapped
}
func myReduce<T>(_ reduceElement: T, _ reducer: (T, Element) -> T) -> T {
var reduced = reduceElement
self.myMap { reduced = reducer(reduced, $0) }
return reduced
}
}
-> 이를 적절하게 활용하기 위해서는, 기본 타입들이 채택한 프로토콜에 대해서도 알아볼 필요가 있겠다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.