고급 TypeScript - 함수와 제네릭: 오버로드 함수

함수와 제네릭: 오버로드 함수

함수와 제네릭 오버로드 함수는 TypeScript에서 매우 중요한 개념으로, 다양한 입력 타입에 대해 유연하게 동작하는 함수를 정의할 수 있게 해줍니다. 이러한 기능은 특히 복잡한 데이터 구조를 다루거나 특정 조건에 따라 다른 타입의 결과를 반환해야 할 때 유용합니다.

1. 기본 개념 이해하기

  • 함수: 프로그램 내에서 특정 작업을 수행하는 코드 블록입니다. 매개변수를 받아들이고, 처리 후 값을 반환할 수 있습니다.

  • 제네릭: 여러 데이터 타입을 지원하는 코드를 작성할 수 있도록 도와주는 TypeScript의 기능입니다. 이를 통해 재사용성과 가독성을 높일 수 있습니다.

  • 오버로드: 동일한 이름의 함수를 여러 번 정의하여 서로 다른 매개변수 목록을 가질 수 있는 기능입니다. 이는 하나의 함수가 다양한 방식으로 호출될 수 있도록 만듭니다.

2. 제네릭 오버로드 함수 구현하기

제네릭 오버로드 함수를 사용하면 다양한 입력 타입에 대한 처리를 보다 쉽게 관리할 수 있습니다. 아래 예제를 통해 이 개념을 설명하겠습니다.

예제: 두 값 비교하기

function compare<T>(a: T, b: T): boolean;
function compare(a: number, b: number): boolean;
function compare(a: string, b: string): boolean;

function compare<T>(a: T, b: T): boolean {
    return a === b; // 동일성 비교
}

// 사용 예시
console.log(compare(5, 5)); // true (number)
console.log(compare('hello', 'world')); // false (string)
console.log(compare(true, true)); // true (boolean)

위의 예제에서는 compare라는 이름의 세 가지 버전이 정의되어 있습니다:

  1. 일반적인 제네릭 버전 (T를 사용하는)
  2. 숫자 전용 버전
  3. 문자열 전용 버전

각각의 경우에 대해 올바른 타입이 전달되면 해당 로직이 실행됩니다.

3. 장점과 활용 사례

  • 유연성:

    • 다양한 데이터 유형을 동시에 처리 가능하므로 코드 중복이 줄어들고 유지보수가 쉬워집니다.
  • 타입 안전성:

    • 잘못된 타입 인자를 사용할 경우 컴파일 타임에서 오류를 발견할 수 있어 더 안정적인 코드를 작성할 수 있습니다.
  • 복잡한 API 설계:

    • 라이브러리나 프레임워크 개발 시 사용자에게 친숙하고 직관적인 API를 제공하는 데 큰 도움이 됩니다.

실생활 응용 사례

예를 들어, 사용자의 프로필 정보를 가져오는 API가 있다고 가정해봅시다:

interface UserProfile {
    id: number;
    name: string;
}

function fetchUser<T extends UserProfile>(idOrName: T | number): Promise<T> {
    return new Promise((resolve) => {
        const user = { id: 1, name: "John Doe" }; // Mocked data
        
        if (typeof idOrName === "number") {
            resolve(user as T); // ID로 조회 후 리턴
        } else {
            resolve(user as T); // Name으로 조회 후 리턴
        }
    });
}

// 사용 예시
fetchUser(1).then(user => console.log(user.name));
fetchUser({ id : 1 , name : "John Doe"}).then(user => console.log(user.id));

위 코드에서는 fetchUser라는 비동기 함수를 만들었습니다. 이 함수는 사용자 ID 또는 이름을 기반으로 프로필 정보를 가져옵니다.

결론적으로, 함수와 제네릭 오버로드 함수를 잘 활용하면 TypeScript로 더욱 강력하고 유연한 코드를 작성할 수 있으며 복잡한 문제도 효과적으로 해결할 수 있습니다!

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe