고급 TypeScript - 고급 인터페이스: 인터페이스 병합

고급 인터페이스: 인터페이스 병합

고급 타입스크립트에서 인터페이스 병합은 여러 개의 인터페이스를 하나로 합치는 기능을 의미합니다. 타입스크립트는 동일한 이름을 가진 여러 인터페이스가 있을 경우, 이들을 자동으로 병합하여 하나의 완전한 인터페이스로 만듭니다. 이는 코드의 재사용성을 높이고, 모듈화를 촉진하며, 대규모 애플리케이션에서 코드 관리에 유용합니다.

1. 인터페이스 병합의 기본 원리

여러 개의 같은 이름을 가진 인터페이스가 정의되면, 타입스크립트는 이를 자동으로 결합하여 새로운 속성을 추가하거나 기존 속성을 수정할 수 있습니다. 예를 들어:

interface Person {
    name: string;
    age: number;
}

interface Person {
    gender: string;
}

// 이제 Person은 다음과 같이 확장됩니다.
const john: Person = {
    name: "John",
    age: 30,
    gender: "male"
};

위 예제에서 Person이라는 두 개의 인터페이스가 정의되었습니다. 첫 번째는 nameage 속성을 가지고 있고, 두 번째는 gender 속성을 추가합니다. 결과적으로 최종적으로 생성된 Person 타입은 세 가지 속성(name, age, gender)을 포함하게 됩니다.

2. 실용적인 예시

인터페이스 병합은 다양한 상황에서 매우 유용하게 사용될 수 있습니다:

  • 기존 라이브러리 확장:
    외부 라이브러리를 사용할 때 해당 라이브러리에 정의된 타입이나 구조를 변경하고 싶다면, 기존 내용을 그대로 유지하면서 필요한 부분만 추가할 수 있습니다.

    // 외부 라이브러리가 제공하는 UserInterface
    interface User {
        id: number;
        username: string;
    }
    
    // 사용자 정보를 저장하는 기능이 필요하다면:
    interface User {
        email?: string; // 선택적 속성 추가
    }
    
    const user1: User = {
        id: 1,
        username: "user01",
    };
    
    // email 정보 없이도 사용 가능
    const user2: User = {
        id: 2,
        username: "user02",
    };
    
  • 애플리케이션 설정 구성:
    애플리케이션 설정 객체에 대해 기본 설정과 사용자 지정 설정을 별도의 파일 또는 모듈로 나누어 관리할 수 있습니다.

    // 기본 설정 정의
    interface AppSettings {
        themeColor?: string;
    }
    
    // 사용자 지정 설정 추가 
    interface AppSettings {
       language?: string; // 언어 선택 추가 
    }
    
    const settings : AppSettings = { 
       themeColor : 'dark', 
       language : 'ko' 
    };
    
    console.log(settings);
    

3. 주의사항

인터페이스 병합 시 몇 가지 주의해야 할 점이 있습니다:

  • 속성 충돌:
    동일한 이름으로 서로 다른 데이터 유형을 가진 프로퍼티를 선언하면 오류가 발생할 수 있으므로 주의를 기울여야 합니다.

    interface Animal {
         species:string;   
    }
    
    // 충돌 발생 - Animal 다시 정의함 
    interface Animal{
         species:number; // 오류 발생!
    }
    
  • 명확한 문서화:
    병합된 모든 프로퍼티와 그 의도를 명확히 문서화하여 팀원들이 이해하기 쉽게 해야 합니다.

결론

인터페이스 병합은 고급 타이프스크립트에서 강력하고 유연한 기능입니다. 이를 통해 개발자는 코드를 더 깔끔하고 효율적으로 유지관리할 수 있으며, 다양한 요구 사항에 맞춰 쉽게 확장 가능합니다. 이러한 특성 덕분에 대규모 프로젝트에서도 복잡성이 줄어들고 가독성이 향상됩니다.

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