[typescript] 타입 호환성과 오버로드

타입 호환성과 오버로드는 TypeScript의 중요한 개념 중 하나입니다. 이러한 개념을 정확히 이해하는 것은 TypeScript를 사용하여 더욱 효과적으로 코드를 작성하는 데 도움이 될 것입니다.

타입 호환성(Type Compatibility)

타입 호환성은 서로 다른 타입들 간의 할당 가능성을 의미합니다. TypeScript에서는 구조적 타입 시스템(structural type system)을 사용하여 타입 간의 호환성을 확인합니다.

interface Animal {
  name: string;
}

interface Dog {
  name: string;
  breed: string;
}

let animal: Animal;
let dog: Dog;

animal = dog; // 가능
dog = animal; // 불가능

위 예제에서 DogAnimal의 모든 속성을 가지고 있기 때문에 AnimalDog를 할당하는 것은 가능합니다. 반대로 AnimalDog의 모든 속성을 갖고 있지 않기 때문에 DogAnimal을 할당하는 것은 불가능합니다.

오버로드(Overload)

오버로드는 함수의 시그니처(signature)를 다르게하여 여러 가지 방식으로 호출될 수 있도록 하는 기능입니다.

function add(a: string, b: string): string;
function add(a: number, b: number): number;
function add(a: any, b: any): any {
  return a + b;
}

위 예제에서 add 함수는 문자열 두 개를 입력으로 받아 문자열을 반환하거나, 숫자 두 개를 입력으로 받아 숫자를 반환할 수 있습니다. TypeScript는 호출 시 전달된 매개변수의 타입에 따라 적절한 오버로드를 선택합니다.

마무리

타입 호환성과 오버로드는 TypeScript를 사용하여 보다 유연하고 안전한 코드를 작성하는 데 중요한 개념입니다. 이러한 기능들을 올바르게 활용하여 코드를 작성하면 타입 안정성을 높일 수 있을 뿐만 아니라 코드의 가독성과 유지보수성을 개선할 수 있습니다.