제네릭 (Generic)
- 제네릭은 함수, 타입 및 데이터 구조에 대한 유연하고 추상적인 코드를 작성할 수 있게 해주는 기능으로, 다양한 타입에서 작동할 수 있도록 일반화된 코드를 작성할 수 있게 해준다.
- 다양한 타입을 하나의 제네릭으로 처리할 수 있다는게 제일 큰 장점이다.
- 제네릭은 실제 타입 이름 (Int, Double 등등)을 사용하는 대신
placeholder
를 사용한다, <T, V, U > 등등
- placeholder의 실제 타입은 함수가 호출되는 순간 결정된다.
- 제네릭 타입으로 정해줘도, 원하는 타입에서만 동작할 수 있도록 제한을 할 수 있기 때문에, 안전하고 의도한대로 기능을 사용할 수 있다.
- 예시 코드 :
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoStrings(_ a: inout String, _ b: inout String) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoNumbers<T>(_ a: inout T, _ b: inout T) where T: Numeric {
let temporaryA = a
a = b
b = temporaryA
}