swift & iOS/swift

[swift] 제네릭 generic <>

whale3 2022. 1. 28. 16:49

제네릭은 스위프트에만 있는 것은 아니다. c, c#, java 등 프로그래밍 언어 전반적으로 있는 기능이다. (타입스크립트에도 있음)

제네릭은 타입을 나중에 결정하도록 해준다. 나중에 언제 결정하냐면 인스턴스가 만들어질 때 parameter로 전달되는 타입으로 결졍된다. 그렇기 때문에 같은 알고리즘을 다양한 데이터 타입에 적용하려고 할 때 제네릭을 사용하면 좋다. 왜냐면 알고리즘의 내용은 똑같은데 Int 타입으로 하나, String 타입으로 하나, Double 타입으로 하나 이렇게 만드느니 제네릭을 사용하여 해당 알고리즘을 사용하려고 할 때 타입을 정하면 알고리즘을 타입 별로 여러 개 만들 필요없이 하나만 있어도 되기 때문이다. 

 

https://developer.apple.com/documentation/swift/1540890-swap

 

Apple Developer Documentation

 

developer.apple.com

swift에 swap이라는 함수가 있는데 argument를 2개 받아 그 값을 서로 맞바꿔준다. 

Int타입의 argument를 전달하면 위의 'T'가 모두 Int가 되고 String타입의 argument를 전달하면 위의 'T'가 모두 String이 된다. 그래서 아래처럼 여러 타입의 argument을 전달할 수 있다. 

var a = "apple"
var b = "banana"
print(a, b) // apple banana
swap(&a, &b)
print(a, b) // banana apple


var one = 1
var two = 2
print(one, two) // 1 2
swap(&one, &two)
print(one, two) // 2 1

 

 

https://developer.apple.com/documentation/swift/array#declaration

 

Apple Developer Documentation

 

developer.apple.com

Array도 제네릭를 사용한 구조체이다. (generic structure)

Array가 선언된 부분을 보면 아래처럼 제네릭을 사용하고 있다. 

@frozen public struct Array<Element> {

}

그래서 배열을 만들 때 아래처럼 작성할 수 있다. Element 자리에 String이 들어가면 문자열을 담는 배열, Double이 들어가면 double을 담는 배열이 된다. 

var someInts: [Int] = []
var x = [Int]()
var xx: Array<Int> = []

 

반응형