Swift Generics

  • Swift 5.1에서 추가된 많은 기능들이 Generics를 사용한다.
  • 그래서 Swift에서의 Generics를 알아보겠다.
  • Generics는 Swift가 타입 시스템이기에 더욱 필요하다.

Swift 타입 시스템

  • Swift는 타입 시스템을 가진 프로그래밍 언어이다.
  • 그래서 아래와 같은 코드는 빌드 에러를 리턴한다.
func sum(a: Int, b: Int) {
	return a + b
}

sum(1,2) // return 3
sum("1", 2) // build error
1 == "1"  // build error

타입 시스템의 장단점

  • 타입 시스템을 가진 언어는 더 안전하고, 버그가 없는 프로그램을 만들 수 있게 해준다.
  • 하지만, 다양한 케이스를 일일히 다뤄줘야 한다는 단점도 있다.
  • 아래와 같이 두 숫자를 더하는 함수만 봐도 그렇다.
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 등도 이에 속한다.

관련 글