🔥 타입 매개변수 이름 짓기

287자
4분

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

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

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

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

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

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

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

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

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

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

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

YouTube 영상

채널 보기
변환 파이프로 컨트롤러 코드 깔끔하게 만들기 | NestJS 가이드
존 매카시가 들려주는 인공지능의 탄생 이야기
커스텀 예외 필터 만들기 | NestJS 가이드
리더 펑터 - 함수도 펑터다! | 프로그래머를 위한 카테고리 이론
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
NestJS 커스텀 예외 만들기 - 에러 처리 깔끔하게 하는 법 | NestJS 가이드
Zod로 스키마 유효성 검사 구현하기 | NestJS 가이드
입력을 전처리하는 Functor - Contravariant와 contramap 이해하기 | 프로그래머를 위한 카테고리 이론