[typescript] 타입 별칭과 인터페이스의 함수 오버로드 정의 방법

TypeScript는 유연하고 강력한 타입 시스템을 제공하여 개발자가 코드를 더 견고하게 작성할 수 있게 도와줍니다. 함수 오버로드는 동일한 함수명으로 여러 시그니처를 가지는 것을 의미하며, TypeScript에서는 이를 타입 별칭과 인터페이스로 정의할 수 있습니다.

타입 별칭(Type Alias)을 이용한 함수 오버로드 정의

타입 별칭은 새로운 타입을 생성할 때 사용됩니다. 이를 활용하여 함수 시그니처를 정의할 수 있습니다. 다음은 문자열이나 숫자를 입력받아 문자열을 반환하는 convert 함수의 타입을 타입 별칭을 이용해 정의하는 예제입니다.

type ConvertFunction = {
    (input: string): number;
    (input: number): string;
};

const convert: ConvertFunction = (input: string | number) => {
    if (typeof input === 'string') {
        return parseInt(input);
    } else {
        return input.toString();
    }
};

인터페이스(Interface)를 이용한 함수 오버로드 정의

인터페이스는 객체의 구조를 정의하는데 사용되지만, 확장성이 있는 방식으로 함수 시그니처를 정의하는데도 사용될 수 있습니다. 아래 예제는 printData 함수의 타입을 인터페이스를 이용해 정의한 것입니다.

interface PrintFunction {
    (data: string): void;
    (data: number): void;
}

const printData: PrintFunction = (data: string | number) => {
    console.log(data);
};

타입 별칭 vs. 인터페이스

타입 별칭과 인터페이스는 많은 측면에서 유사하게 동작하지만, 타입 별칭은 값(타입)도 가질 수 있는 반면, 인터페이스는 지을 수 없습니다.

결론

함수 오버로드는 TypeScript에서 유연하고 강력한 기능으로, 타입 별칭과 인터페이스를 활용하여 쉽게 정의할 수 있습니다. 이들을 적절히 활용하여 코드를 더욱 안정적이고 확장 가능한 형태로 구성할 수 있습니다.

더 자세한 정보는 TypeScript 공식 문서를 참고하세요.

TypeScript 공식 문서 - 함수 오버로드