🔥 타입 매개변수 이름 짓기

287자
4분

타입 매개변수를 잘 이름 짓는 것은 제네릭 코드의 가독성과 이해도를 높이는 데 중요한 역할을 합니다. 대부분의 경우 타입 매개변수는 해당 제네릭 타입이나 함수와의 관계를 나타내는 의미 있는 이름을 갖습니다.

예를 들어 Dictionary<Key, Value>에서는 KeyValue라는 이름을 통해 딕셔너리에서 키와 값으로 사용되는 타입임을 명확히 알 수 있지요. Array<Element>에서도 마찬가지로 Element라는 이름이 배열의 요소로 쓰이는 타입 매개변수임을 나타냅니다.

// Key와 Value라는 이름을 통해 딕셔너리의 키와 값 타입을 나타냅니다.
var numberNames: Dictionary<Int, String> = [1: "One", 2: "Two", 3: "Three"]
 
// Element는 배열의 요소 타입을 의미합니다.
var primes: Array<Int> = [2, 3, 5, 7, 11, 13]
swift

하지만 항상 이런 식으로 의미 있는 이름을 붙일 수 있는 것은 아닙니다. 타입 매개변수와 제네릭 타입 또는 함수 사이에 특별한 관계가 없다면, 전통적으로 T, U, V와 같은 단일 대문자를 사용하여 이름을 짓습니다.

앞서 본 swapTwoValues(_:_:) 함수에서 사용한 T가 그 예시죠. 여기서 T는 특정 역할을 나타내기보다는 임의의 타입을 나타내기 위한 용도로 쓰였습니다.

func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
    // T는 특별한 의미를 갖지 않는 임의의 타입입니다.
    let temporaryA = a
    a = b
    b = temporaryA
}
swift

타입 매개변수의 수가 많아진다면 T, U, V, W 순으로 이름을 붙이는 것이 일반적인 관례입니다.

func doSomething<T, U, V>(t: T, u: U, v: V) {
    // 여러 개의 타입 매개변수를 사용할 때는 T, U, V 순으로 이름을 짓습니다.
    // ...
}
swift

이렇게 적절한 이름 규칙을 사용하면 제네릭 코드의 의도를 더 명확히 전달할 수 있고, 다른 개발자들도 코드를 더 쉽게 이해할 수 있습니다.

그러니 제네릭을 사용할 때는 타입 매개변수의 이름도 신중하게 선택하세요. 가능하다면 역할을 잘 나타내는 이름을 붙이고, 그렇지 않다면 관용적인 이름 규칙을 따르는 것이 좋겠죠?

타입 매개변수의 이름은 사소해 보일 수 있지만, 코드의 가독성에 큰 영향을 미친답니다. 앞으로 제네릭을 사용할 때 이 점을 꼭 기억해 주시기 바랍니다!