[IOS 로드맵] Generics
Generics
제네릭은 swift에서 유연하고 재사용 가능하게 해주는 코드 활용인데
중복사용을 피하게 해주고 명확하지만 추상적인 코딩을 가능하게 해준다
제네릭의 예제를 살펴보면서 이해해보자
제네릭을 코드로 이해하자
아래는 일반적인 swap코드입니다.
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
이렇게 작성하면 input으로 Int만 받을 수 있으니 Double이나 Float, String등등 다른 형식에 사용하려면 추가적인 함수를 아래 줄줄이 기재하고 비슷한 코드들이 줄줄이 이어지는데
제네릭을 활용하면 이를 해결할 수 있습니다.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
여기서 T는 무엇일까
Type Parameters
함수 이름뒤에 작성되며 함수가 호출될 때마다 실제 타입으로 즉시 대체됩니다.
이 덕에 위에서 보듯이 변수 타입과 상관없이 다른타입이여도 하나의 함수로 재사용 할 수 있게 되죠
Dictionary<Key, Value>, Array<Element> 처럼 <>안에 T를 대체하는 이름으로 설명이 붙지만 큰 의미가 없는 경우는 T나 U를 사용합니다.
사용자 정의 제네릭 활용
struct IntStack {
var items: [Int] = []
mutating func push(_ item: Int) {
items.append(item)
}
mutating func pop() -> Int {
return items.removeLast()
}
}
일반적으로 작성한 Int형 스택입니다
이것을 제네릭으로 변환하면
struct Stack<Element> {
var items: [Element] = []
mutating func push(_ item: Element) {
items.append(item)
}
mutating func pop() -> Element {
return items.removeLast()
}
}
제네릭 버전의 스택인데 이를 활용하는 코드는
var stackOfStrings = Stack<String>()
stackOfStrings.push("uno")
stackOfStrings.push("dos")
stackOfStrings.push("tres")
stackOfStrings.push("cuatro")
// the stack now contains 4 strings
이런식으로 제네릭은 어디 하나에서 국한되는게 아닌 다양하게 활용 할 수 있습니다.
공식 가이드 : https://docs.swift.org/swift-book/LanguageGuide/Generics.html
Author And Source
이 문제에 관하여([IOS 로드맵] Generics), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@willis18/IOS-로드맵-Generics저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)