[typescript] 함수와 메서드의 오버로딩을 위한 타입 가드

TypeScript에서는 오버로딩을 사용하여 여러 가지 유형의 입력을 받는 함수나 메서드에 대한 타입 가드를 정의할 수 있습니다. 오버로딩은 동일한 이름의 함수나 메서드를 다양한 매개변수 유형으로 정의하는 기능을 말합니다.

오버로딩의 필요성

오버로딩은 각각의 고유한 매개변수 유형에 따라 다른 어떤 동작을 수행해야 할 때 유용합니다. 예를 들어, 동일한 이름의 함수가 숫자나 문자열을 입력으로 받아서 서로 다른 동작을 수행해야 할 경우 오버로딩을 사용하여 이를 구현할 수 있습니다.

함수 오버로딩

function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: any, b: any): any {
    if (typeof a === 'number' && typeof b === 'number') {
        return a + b;
    } else if (typeof a === 'string' && typeof b === 'string') {
        return a.concat(b);
    }
}

위의 예제는 add 함수를 숫자 또는 문자열을 입력으로 받아 각각의 유형에 따라 다른 동작을 수행하도록 오버로딩한 것입니다.

메서드 오버로딩

클래스의 메서드에 대해서도 오버로딩을 사용할 수 있습니다. 메서드 오버로딩은 일반 함수 오버로딩과 유사하게 작동하지만, 클래스의 메서드로 정의됩니다.

class Calculator {
    add(a: number, b: number): number;
    add(a: string, b: string): string;
    add(a: any, b: any): any {
        if (typeof a === 'number' && typeof b === 'number') {
            return a + b;
        } else if (typeof a === 'string' && typeof b === 'string') {
            return a.concat(b);
        }
    }
}

위의 예제는 Calculator 클래스의 add 메서드를 숫자 또는 문자열을 입력으로 받아 각각의 유형에 따라 다른 동작을 수행하도록 오버로딩한 것입니다.

정리

TypeScript의 함수와 메서드 오버로딩을 이용하면 다양한 유형의 입력을 받아 다른 동작을 수행하는 함수나 메서드를 효율적으로 정의할 수 있습니다. 오버로딩을 사용하여 코드의 가독성을 높이고 유지보수를 용이하게 할 수 있습니다.

참고문헌: