제네릭은 스위프트의 강력한 기능 중 하나입니다.
제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있습니다. 또한 제네릭으로 구현한 기능과 타입은 재사용 하기도 쉽고, 코드의 중복을 줄일 수 있기에 깔끔하고 추상적인 표현이 가능합니다.
무슨 말인지 이해가 어렵나요? 아래의 예제를 통해 제네릭에 대해 알아보겠습니다.
func setValue(value: Int, key: String) {
UserDefaults.standard.set(value, forKey: key)
}
func setValue(value: Float, key: String) {
UserDefaults.standard.set(value, forKey: key)
}
func setValue(value: Double, key: String) {
UserDefaults.standard.set(value, forKey: key)
}
func setValue(value: String, key: String) {
UserDefaults.standard.set(value, forKey: key)
}
func setValue(value: Bool, key: String) {
UserDefaults.standard.set(value, forKey: key)
}
위의 코드는 UserDefaults에 값을 저장하기 위해 오버 로딩 하여 타입별로 함수를 만들어 주었습니다.
하지만 똑같은 동작을 하는 함수를 타입별로 만들어 주는 것은 매우 귀찮고 깔끔하지 않은 코드입니다.
func setValue<T>(value: T, key: String) {
UserDefaults.standard.set(value, forKey: key)
}
하지만 제네릭을 사용하여 함수를 만든다면 타입을 묶어서 하나의 함수로 만들 수 있어서 유연하게 대응 가능하고, 코드의 중복을 줄일 수 있기 때문에 스위프트의 강력한 기능 중 하나라고 하는 것입니다!
※ 제네릭 타입을 구현하면 구조체, 클래스, 열거형 등이 어떤 타입과도 연관되어 동작할 수 있습니다.
<>
사이에 제네릭을 위한 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시합니다.(위의 예시에서는 T
를 사용)