중급 TypeScript - 고급 함수: 함수 오버로드

고급 함수: 함수 오버로드

함수 오버로드는 동일한 이름을 가진 여러 개의 함수를 정의할 수 있는 TypeScript의 기능으로, 각기 다른 매개변수 유형이나 개수를 받아들일 수 있습니다. 이를 통해 코드의 가독성을 높이고, 다양한 입력에 대한 처리를 보다 명확하게 할 수 있습니다.

함수 오버로드의 필요성

  • 다양한 입력 처리: 동일한 기능을 수행하지만 서로 다른 형태의 데이터를 처리해야 할 경우 유용합니다.
  • 가독성 향상: 같은 이름을 사용하여 관련된 작업을 그룹화하면 코드가 더 이해하기 쉬워집니다.
  • 유지보수 용이성: 코드를 수정할 때 모든 함수를 일일이 변경하지 않아도 되므로 유지보수가 간편해집니다.

기본 문법

함수 오버로드를 정의하려면 먼저 여러 가지 시그니처(매개변수 목록과 반환 타입)를 선언하고, 그 다음 하나의 구현체를 작성합니다. 아래 예제를 통해 살펴봅시다.

// 함수 오버로드 시그니처
function greet(person: string): string;
function greet(person: string, age: number): string;

// 구현체
function greet(person: any, age?: any): string {
    if (age !== undefined) {
        return `안녕하세요, ${person}님! 당신은 ${age}세입니다.`;
    }
    return `안녕하세요, ${person}님!`;
}

// 사용 예시
console.log(greet("홍길동")); // 출력: 안녕하세요, 홍길동님!
console.log(greet("김철수", 30)); // 출력: 안녕하세요, 김철수님! 당신은 30세입니다.

위 예제에서 greet 함수는 두 가지 방식으로 호출될 수 있습니다. 첫 번째는 이름만 받는 것이고 두 번째는 이름과 나이를 모두 받습니다. 각각에 대해 적절한 메시지를 반환하도록 구현되어 있습니다.

주의사항

  • 구현체와 시그니처 불일치 금지:

    • 모든 시그니처에서 다룰 수 없는 매개변수가 있을 경우 에러가 발생합니다.
  • 리턴 타입 일관성 유지:

    • 모든 시그니처는 같은 리턴 타입이어야 합니다.
  • 선택적 매개변수 고려:

    • 선택적 매개변수를 사용할 때에는 항상 마지막에 위치해야 하며 파라미터 순서도 중요합니다.

실전 활용 사례

함수 오버로딩은 특히 API 설계나 라이브러리 개발에서 매우 유용하게 쓰입니다. 예를 들어 파일 읽기 및 쓰기 작업을 하는 라이브러리를 만들 때 다양한 형식(예: 텍스트 파일 vs 바이너리 파일)에 따라 다른 방식으로 처리하는 방법을 제공할 수 있습니다:

// 파일 읽기 함수 오버로드
function readFile(path: string): Promise<string>;
function readFile(path: string, encoding?: 'utf8' | 'ascii'): Promise<Buffer>;

// 구현체
function readFile(path: any, encoding?: any): Promise<any> {
    return new Promise((resolve) => {
        // 실제 파일 읽기 로직 (단순화)
        if (encoding === undefined) {
            resolve(Buffer.from(`파일 내용(${path})`, 'utf8'));
        } else {
            resolve(`파일 내용(${path})`.toString(encoding));
        }
    });
}

// 사용 예시
readFile("example.txt").then(content => console.log(content));
readFile("example.txt", "utf8").then(content => console.log(content));

위와 같이 다양한 인코딩 옵션에 따라 결과를 다르게 반환하는 readFile 함수를 구성할 수 있어 사용자에게 더 많은 선택권과 편리함을 제공합니다.

결론

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