포스트

제네릭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 라이센스를 따릅니다.

인기 태그