🔥 타입 매개변수
Swift에서 제네릭을 사용할 때 타입 매개변수(Type Parameters)를 지정하여 타입에 대한 플레이스홀더 역할을 하도록 할 수 있습니다. 타입 매개변수를 사용하면 실제 타입을 모르는 상태에서도 코드를 작성할 수 있으며, 함수나 타입을 더욱 유연하고 재사용 가능하게 만들 수 있지요.
이전에 살펴 본 swapTwoValues(_:_:)
예제에서 사용된 T
는 타입 매개변수의 좋은 예시입니다. 타입 매개변수는 함수 이름 바로 뒤, 꺾쇠 괄호(<>
) 사이에 명시하며, 여러 개의 타입 매개변수를 쉼표로 구분하여 지정할 수도 있어요.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { // T는 타입 매개변수로, 함수가 호출될 때 실제 타입으로 대체됩니다. let temporaryA = a a = b b = temporaryA }
swift
타입 매개변수를 지정하고 나면 함수의 매개변수 타입이나 반환 타입, 함수 본문 내에서 타입 어노테이션 등에 해당 타입 매개변수를 사용할 수 있습니다. 함수가 호출될 때마다 타입 매개변수는 실제 타입으로 대체되지요.
위 예제에서 swapTwoValues(_:_:)
함수가 처음 호출되었을 때는 T
가 Int
로 대체되었고, 두 번째 호출 시에는 String
으로 대체되었습니다.
var someInt = 3 var anotherInt = 107 swapTwoValues(&someInt, &anotherInt) // someInt는 이제 107, anotherInt는 3 var someString = "hello" var anotherString = "world" swapTwoValues(&someString, &anotherString) // someString은 이제 "world", anotherString은 "hello"
swift
이렇게 제네릭과 타입 매개변수를 활용하면 여러 타입에 대해 동작하는 함수나 타입을 만들 수 있어 코드의 재사용성과 표현력이 크게 향상됩니다. 실제 타입은 컴파일러가 타입 추론을 통해 결정하므로, 우리는 타입에 구애받지 않고 로직에 집중할 수 있게 되지요.
다음은 여러 타입 매개변수를 사용하는 예시 코드입니다:
func printTwoTypes<T, U>(_ a: T, _ b: U) { // 두 개의 타입 매개변수 T와 U를 사용합니다. print("첫 번째 인자 \(a)의 타입은 \(type(of: a))입니다.") print("두 번째 인자 \(b)의 타입은 \(type(of: b))입니다.") } printTwoTypes(3, "hello") // 출력 결과: // 첫 번째 인자 3의 타입은 Int입니다. // 두 번째 인자 hello의 타입은 String입니다. printTwoTypes("world", true) // 출력 결과: // 첫 번째 인자 world의 타입은 String입니다. // 두 번째 인자 true의 타입은 Bool입니다.
swift
이처럼 여러 개의 타입 매개변수를 사용하면 실제 타입과 무관하게 다양한 조합의 인자를 받아 처리할 수 있는 함수를 만들 수 있답니다.