타입스크립트(TypeScript) type vs interface, 이제 헷갈리지 마세요!
개발자가 타입스크립트(TypeScript)의 type과 interface의 차이점을 명확히 이해하지 못하고 있다는 것을 인지하고, 공식 문서를 통해 학습을 시작함
타입스크립트(TypeScript) 공식 문서에서는 interface의 확장 가능성과 type의 유연성을 핵심 차이로 제시함
객체 contract, API 응답, props 정의 시 interface를, union, tuple, conditional type 사용 시 type을 활용하는 방식을 제시함
interface extends와 intersection(&)의 충돌 처리 방식 차이를 통해 타입 충돌(Type Conflict)을 조기에 발견하는 방법 강조
타입스크립트(TypeScript) 공식 문서가 제시하는 핵심 차이
타입스크립트(TypeScript) 공식 문서에 따르면, type alias와 interface는 매우 유사하며 대부분의 경우 자유롭게 선택 가능하다. 하지만 interface는 확장 가능(Extendable)하고, type은 재선언을 통한 확장이 불가능하다는 점이 핵심이다.
interface: 객체 구조(Object Structure) 확장에 적합하며, 여러 파일에 분산된 타입을 병합하는 경우 유용
type: union, tuple, conditional type과 같은 타입 표현 자체를 조합하는 데 적합
이러한 차이점을 이해하면, 프로젝트의 요구사항에 맞는 타입을 선택할 수 있다.
interface extends vs intersection(&)의 충돌 처리 방식
interface extends와 intersection(&)은 객체 타입을 합치는 데 사용되지만, 타입 충돌(Type Conflict) 처리 방식에서 차이를 보인다. interface extends는 선언 단계에서 바로 타입 충돌을 감지하여 개발자가 즉시 수정할 수 있도록 돕는다.
interface extends: 타입 호환성(Type Compatibility) 문제를 조기에 발견하여 코드의 안정성을 높임
intersection(&): 서로 다른 타입의 프로퍼티가 존재할 경우, never 타입으로 처리되어 런타임 에러(Runtime Error) 발생 가능성
따라서 객체 contract나 계층 구조를 설계할 때는 interface extends를 사용하는 것이 권장된다.
타입 선택 기준: 상황별 권장 방식
글쓴이는 객체 contract, API 응답, props 정의 시 interface를, union, tuple, conditional type 사용 시 type을 활용하는 방식을 제시한다. 또한, 복잡한 객체 타입을 재사용해야 할 때는 interface를 사용하는 것이 IDE에서 타입 정보를 확인하기 용이하다고 설명한다.
객체 contract / API 응답 / props: interface 사용 권장
객체 계층 확장: interface extends 사용 권장
복잡한 객체 타입 재사용: interface 사용 권장
union / tuple / conditional type: type 사용 권장
이러한 기준을 통해 코드의 가독성과 유지보수성을 향상시킬 수 있다.
프로젝트 컨벤션(Convention)의 중요성
글에서는 프로젝트마다 컨벤션이 다를 수 있음을 강조하며, 중요한 것은 타입 선택의 이유를 명확하게 설명할 수 있어야 한다는 점을 강조한다. 단순히 팀의 관습을 따르는 것이 아니라, 각 상황에 맞는 타입을 선택하고 그 이유를 이해하는 것이 중요하다.
컨벤션 준수: 코드 일관성(Code Consistency) 유지 및 팀 협업 효율 증대
타입 선택의 이유: 코드 품질(Code Quality) 향상 및 유지보수성 개선
명확한 설명: 지속적인 학습(Continuous Learning)을 통해 기술적 의사 결정 능력 강화
결론적으로, 타입스크립트(TypeScript)를 효과적으로 사용하기 위해서는 type과 interface의 차이점을 이해하고, 프로젝트의 컨벤션에 따라 적절한 타입을 선택하는 것이 중요하다.