- Swift 5.1에서 추가된 많은 기능들이 Generics를 사용한다.
- 그래서 Swift에서의 Generics를 알아보겠다.
- Generics는 Swift가 타입 시스템이기에 더욱 필요하다.
Swift 타입 시스템
- Swift는 타입 시스템을 가진 프로그래밍 언어이다.
- 그래서 아래와 같은 코드는 빌드 에러를 리턴한다.
func sum(a: Int, b: Int) {
return a + b
}
sum(1,2)
sum("1", 2)
1 == "1"
타입 시스템의 장단점
- 타입 시스템을 가진 언어는 더 안전하고, 버그가 없는 프로그램을 만들 수 있게 해준다.
- 하지만, 다양한 케이스를 일일히 다뤄줘야 한다는 단점도 있다.
- 아래와 같이 두 숫자를 더하는 함수만 봐도 그렇다.
func sum(a: Int, b: Int) -> Int {
return a + b
}
func sum(a: Double, b: Double) -> Double {
return a + b
}
func sum(a: CGFloat, b: CGFloat) -> CGFloat {
return a + b
}
Generic Function
- 이러한 타입 시스템의 단점을 보완하기 위해 Generics가 존재한다.
- Generics를 사용해 만든, 두 숫자를 더하는 아래의 함수를 보자.
func sum<T: Summable>(a: T, b: T) -> T {
return a + b
}
- 이러한 함수를 "Generic Function"이라고 부른다.
Swift Generics
- Generic Type이라는 것도 있는데,
- 애플의 Foundation에서 쓰이는 많은 클래스들도 Generic Type이다.
- Stack 자료 구조로 예를 들어보면,
struct Stack<Element> {
var list: [Element] = []
func push(_ element: Element) {
list.append(element)
}
func pop() -> Element {
return list.popLast()
}
}
- 이런식으로, 초기화 할 때 지정해주는 타입을 Generic Type이라고 하고,
- Array, Dictionary 등도 이에 속한다.
관련 글