Swift 제네릭 정리
Swift에서 제네릭은 코드 재사용성을 높이고, 타입에 독립적인 함수, 구조체, 클래스, 열거형 등을 작성할 수 있게 해준다.
제네릭 함수
제네릭 함수는 타입 매개변수를 사용하여 다양한 타입에 대해 동작하는 함수를 작성할 수 있게 해준다.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
제네릭 타입
제네릭 타입은 구조체, 클래스, 열거형에서 사용되어 다양한 타입에 대해 동작하는 타입을 정의할 수 있게 해준다.
//제네릭 구조체
struct Stack<Element> {
var items = [Element]()
mutating func push(_ item: Element) {
items.append(item)
}
mutating func pop() -> Element {
return items.removeLast()
}
}
//제네릭 클래스
class Box<T> {
var value: T
init(value: T) {
self.value = value
}
}
//제네릭 열거형
enum Result<Value> {
case success(Value)
case failure(Error)
}
타입 제약
타입 제약은 제네릭 타입이 특정 프로토콜을 준수해야 함을 명시해준다.
func findIndex<T: Equatable>(of valueToFind: T, in array: [T]) -> Int? {
for (index, value) in array.enumerated() {
if value == valueToFind {
return index
}
}
return nil
}
연관 타입
연관 타입은 프로토콜에서 제네릭 타입을 정의할 때 사용한다.
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
제네릭 서브스크립트
제네릭 서브스크립트는 서브스크립트에 제네릭을 사용할 수 있게 해준다.
extension Dictionary {
subscript<Index: Hashable>(index: Index) -> Value? {
get {
return self[index as! Key]
}
set {
self[index as! Key] = newValue
}
}
}
'Swift' 카테고리의 다른 글
Xcode 기본 뷰 컨트롤러 초기화 오류 (0) | 2024.06.18 |
---|---|
Xcode 간단 용어정리 (0) | 2024.06.17 |
의존 관계 역전 원칙(Dip, Dependency Inversion Principle) (0) | 2024.06.14 |
기초 문법 클로저: 상 (0) | 2024.06.13 |
기초 문법 타입 캐스팅 (1) | 2024.06.12 |