오늘은 swift를 사용하다보면 종종 접하게 되는 문법인 Generic에 대하여 알아보고자 한다.
What is Generic?
Generic은 그 뜻과 동일하게 범용적인 코드, 즉 타입에 의존적이지 않은 코드를 작성할 수 있게 해줌으로서 이를 사용할 경우 기존보다 조금 더 유연한 코드를 작성할 수 있게 된다.
func input(text: String) -> String{
let value = text
return value
}
우리가 보통 함수 등을 정의할 때, 타입을 지정하여 작성하게 되는데 이럴 경우에는 해당 함수는 정의된 타입에 의존성을 띄어 그 외의 타입을 받아와 사용하는 것이 불가하게 된다. 하지만 사람이란 화장실 들어갈 때와 나올 때의 마음이 다르듯, 이렇게 작성한 함수가 여러 타입에서도 작동하게 만들고 싶어질 수가 있다.
그럴 때, 사용하는 것이 Generic이라는 문법!!
func input<T>(text: T) -> T{
let value = text
return value
}
let realValue: Int = input(text: 15)
이런 형태(<>를 사용)를 통해 placeholder를 지정하고 실제로 호출할 때, 사용하고 싶은 타입을 원하는 대로 지정하여 사용할 수 있도록 해주는 것이 Generic이다.
이러한 Generic은 단순히 함수에서만 사용 가능한 것이 아니라 타입에서도 가능하며, 'T: equatable'과 같이 프로토콜이나 클래스에 대한 제약부터 확장이나 오버로딩까지도 충분히 활용할 수 있다.
위와 같은 예시에서도 알 수 있지만 Generic의 경우에는 코드의 범용성을 높여주고 어떠한 타입에 대한 의존성을 대폭 낮춰주기 때문에 여러 곳에서 다양한 타입으로 활용할 필요가 있는 로직과 관련하여 활용성이 높다.
(본인의 경우에는 decode/encode 로직에서 활용하기도 함)