반응형
Swift 제너릭 (Generic)
자료형에 의존하지 않는 알고리즘만 작성된 함수 (C++에서는 Templete 함수라고 함!)
Swift 배열을 써봤다면 같은 자료형이 아니더라도 배열에 담기는 것을 알 수 있다.
Swift의 Array Library가 제너릭으로 작성되었기 때문이다.
그밖에도 Stack, Queue 등 자료형에 의존하지 않는 알고리즘을 필요로 하는 데에 제너릭이 사용된다.
(자료형에 의존한다면 똑같은 기능을 함에도 자료형별로 다 따로 선언해야함..-_-;;;)
ex)
사실 Swift에는 '튜플'을 이용하면 되므로 별도의 swap함수를 만들지 않아도 된다. ( var1 = (p1,p2), var2 = (p2, p1) )
제너릭 사용 예를 들기 위해 swap함수를 작성함.
func swapInt(a:inout T, b:inout T){
let tmp = a
a = b
b = tmp
}
func swapDouble(a:inout Double, b:inout Double){
let tmp = a
a = b
b = tmp
}
인자를 교환한다는 알고리즘은 동일함에도 매개변수의 자료형에 의존한다면 위 같은 함수들을 각각 만들어야함.
여기서 제너릭을 사용하여 이러한 불편함 해소.
func 함수이름<T>(param1:T, para2:T) -> T{
내용
return 반환값
}
제너릭 함수 기본 형태를 설명하면 위와 같다. 함수이름 옆에 바로 <T>를 적음으로써 이 함수는 Generic으로 작성됐음을 알린다.
(구조체, 배열 등도 마찬가지로 이름 바로 다음에 <T>로 명시)
T타입은 실제 호출될 때마다 결정된다.
func swapTwo<T>(a:inout T, b:inout T){
let tmp = a
a = b
b = tmp
}
간단하게 스왑으로 예를 들면 위 코드와 같다.
자료형별로 swapInt 함수와 swapDouble 함수를 각각 만들었을 때와 제너릭 함수 하나로 통일했을 때의 결과가 같다.
코드 간결성, 가독성 등의 이점을 모두 얻었다.
반응형
'Swift 기초' 카테고리의 다른 글
Swift 클로저(Closure) (0) | 2019.03.30 |
---|---|
Swift 중첩함수 (0) | 2019.03.28 |
Swift 함수 기초 (2) | 2019.03.27 |
[Swift 기초] switch case 문 (0) | 2019.03.16 |
[Swift 기초] while, repeat while 문 (0) | 2019.03.16 |