[typescript] 타입 가드를 사용한 함수 오버로드

TypeScript는 자바스크립트의 상위 집합인 정적 타입을 지원하는 언어로, 타입 가드를 사용하여 더욱 안전하고 정확한 코드를 작성할 수 있습니다. 함수 오버로드는 TypeScript에서 하나의 함수가 여러 가지 방식으로 호출될 수 있도록 하는 데에 유용하며, 이러한 기능을 타입 가드와 함께 사용하여 타입 안정성을 향상시킬 수 있습니다.

타입 가드란 무엇인가요?

타입 가드는 특정 조건 아래에서의 타입을 추론하거나 타입을 확정할 수 있는 패턴을 의미합니다. 주로 typeof, instanceof, in 키워드와 같은 특정한 표현식들을 사용하여 타입을 판별하고자 할 때 활용됩니다.

함수 오버로드란 무엇인가요?

함수 오버로드는 동일한 이름의 함수가 서로 다른 시그니처(매개변수 타입 또는 반환 타입 등)를 갖는 것을 가능하게 합니다. TypeScript는 함수 오버로드를 지원하여 호출 시에 인자의 타입에 따라 적절한 시그니처를 찾아 실행할 수 있도록 합니다.

타입 가드를 사용한 함수 오버로드 예시

다음은 TypeScript에서 타입 가드와 함께 함수 오버로드를 사용하는 예시입니다.

type Fish = { swim: () => void };
type Bird = { fly: () => void };

function move(animal: Fish | Bird) {
  if ("swim" in animal) {
    return "swimming...";
  }
  return "flying...";
}

const fish: Fish = { swim: () => console.log("I'm swimming") };
const bird: Bird = { fly: () => console.log("I'm flying") };

console.log(move(fish)); // 출력: "swimming..."
console.log(move(bird)); // 출력: "flying..."

위 예시에서, move 함수는 Fish 타입 또는 Bird 타입을 입력으로 받아 각각 수영 또는 날기 동작을 실행합니다. 함수 내부에서 if ("swim" in animal)를 통해 입력된 animal의 속성을 체크하여 타입을 가드하고 있습니다.

결론

타입 가드를 사용하여 함수 오버로드를 구현하면 코드의 가독성과 안정성을 높일 수 있습니다. TypeScript에서는 이러한 기능들을 통해 정적 타입의 장점을 최대한 활용할 수 있으며, 잠재적인 오류를 방지하고 유지보수성을 높일 수 있습니다.

더 많은 정보는 TypeScript 공식 문서를 참고하실 수 있습니다.