728x90
제네릭
제네릭은 스위프트의 어떤 타입에도 유연하게 대응할 수 있으며 코드의 중복을 줄이는 기능이다.
또한, 제네릭으로 구현한 기능과 타입은 재사용에도 쉬우며 Array, Dictionary, Set 등의 타입은 모두 제네릭 컬렉션이다.
import Foundation
func swapTwoInt(_ a: inout Int, _ b: inout Int) {
let tmp: Int = a
a = b
b = tmp
}
var intOne: Int = 10
var intTwo: Int = 50
print("intOne : \(intOne) | intTwo : \(intTwo)")
swapTwoInt(&intOne, &intTwo)
print("intOne : \(intOne) | intTwo : \(intTwo)")
func swapTwoString(_ a: inout String, _ b: inout String) {
let tmp: String = a
a = b
b = tmp
}
var strOne: String = "A"
var strTwo: String = "B"
print("strOne : \(strOne) | strTwo : \(strTwo)")
swapTwoString(&strOne, &strTwo)
print("strOne : \(strOne) | strTwo : \(strTwo)")
위처럼 모든 변수 타입에 대응하는 함수와 같이 지저분한 코드를
제네릭을 사용하게 된다면, 아래와 같이 바꿀 수 있다.
제네릭 문법은 메소드 이름 옆에 <제네릭 타입 명>으로 명시해두고,
해당 타입을 다른 타입과 같이 사용하면 된다.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let tmp: T = a
a = b
b = tmp
}
var intOne: Int = 10
var intTwo: Int = 50
print("intOne : \(intOne) | intTwo : \(intTwo)")
swapTwoValues(&intOne, &intTwo)
print("intOne : \(intOne) | intTwo : \(intTwo)")
var strOne: String = "A"
var strTwo: String = "B"
print("strOne : \(strOne) | strTwo : \(strTwo)")
swapTwoValues(&strOne, &strTwo)
print("strOne : \(strOne) | strTwo : \(strTwo)")
'iOS > Swift Grammar' 카테고리의 다른 글
[Swift] final을 사용해야 하는 이유 with Dispatch (0) | 2024.05.22 |
---|---|
[Swift] 제네릭 대신 Any 타입을 사용하면 안될까 ? (1) | 2024.02.15 |
[Swift] 클로저(Closure) 간소화 표현, 값 획득, 탈출 클로저 (1) | 2024.02.06 |
[Swift] 클로저(Closure) 기본 클로저와 후행(트레일링) 클로저 (1) | 2024.02.06 |
[Swift] class와 struct 차이 (0) | 2024.01.09 |