안녕하세요.
맥파이입니다.
오늘은 Generic에 대해 학습을 진행해보겠습니다.
Generic
Generic은 함수, 메소드, 클래스, 구조체, 열거형 등에서 사용할 수 있는 타입 안정성(Type Safety)을 보장하면서 재사용 가능한 코드를 작성할 수 있게 해주는 기능입니다.
Generic을 사용하면 여러 다른 타입에서 동일한 로직을 적용할 수 있어 코드의 재사용성을 높일 수 있습니다.
Generic은 타입 매개변수(Type Parameters)를 사용하여 구현됩니다.
타입 매개변수는 제네릭 코드를 작성할 때 실제 타입으로 대체될 수 있는 임시 타입 변수입니다.
제네릭 코드에서 타입 매개변수는 "<>" 안에 선언됩니다.
func printValue<T>(value: T) {
print("Value: \(value)")
}
printValue(value: 10) // Output: Value: 10
printValue(value: "Hello, world!") // Output: Value: Hello, world!
T는 타입 매개변수입니다. printValue 함수는 타입 매개변수 T를 받아들이는 제네릭 함수이며, Int와 String 타입 모두를 처리할 수 있습니다.
제네릭 타입을 구현하는 방법은 클래스나 구조체의 정의에서 타입 매개변수를 사용하는 것입니다. 예를 들어, 다음은 제네릭 스택(Stack)을 구현한 예입니다.
struct Stack<T> {
var items = [T]()
mutating func push(_ item: T) {
items.append(item)
}
mutating func pop() -> T? {
return items.popLast()
}
}
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
intStack.push(3)
print(intStack.pop()) // Output: Optional(3)
위 예제에서 Stack<T>는 타입 매개변수 T를 사용하여 정의된 제네릭 스택입니다.
Stack<T>는 Int 타입의 스택을 만들기 위해 Stack<Int>()와 같이 사용될 수 있습니다.
Stack<T>에서 String 타입의 스택을 만들기 위해서는 Stack<String>()으로만 변경하면 사용이 가능합니다.
같은 코드를 타입 매개변수만 수정하면 사용이 가능합니다.
제너릭 타입을 사용할수 없었다면, 타입별 코드를 무자비하게 생산해냈어야 할것입니다.
어렵지만, 배워두면 참 좋은 코드일것 같습니다.
또 만나요!!
'개발 관련 > iOS SWIFT' 카테고리의 다른 글
[Swift] 고차함수 (map, filter, reduce) 1회차 (0) | 2023.04.11 |
---|---|
[Swift] ARC(Automatic Reference Counting), 참조 카운트 (0) | 2023.04.09 |
[Swift] typealias와 associatedtype의 차이점 (0) | 2023.04.07 |
[Swift] enum은 무엇인가? (0) | 2023.04.06 |
[Swift] Associated Type 이란? (0) | 2023.04.05 |