[Typescript] 왜 TypeScript를 써야 할까?

해피몬·2024년 8월 23일
post-thumbnail

TypeScript란? 🤔

TypeScript는 JavaScript의 상위 언어로, Microsoft에서 개발하여 JavaScript에 정적 타입 시스템을 추가한 언어임. TypeScript는 JavaScript의 모든 기능을 포함하면서도 컴파일 타임에 타입 검사를 지원하여 오류를 미리 방지하고, 더 읽기 쉽고 유지보수하기 쉬운 코드를 작성하도록 도와줌. TypeScript로 작성된 코드는 트랜스파일(transpile) 과정을 거쳐 브라우저에서 실행 가능한 JavaScript 코드로 변환되므로, 기존 JavaScript 프로젝트에도 쉽게 도입할 수 있음.

TypeScript를 사용해야 하는 주요 이유 🎯

컴파일 타임에 타입 오류를 잡아주는 정적 타입 시스템

JavaScript는 동적 타입 언어로, 코드가 실행되기 전에는 데이터 타입 오류를 확인할 방법이 없음. 반면, TypeScript는 정적 타입 검사를 통해 컴파일 단계에서 타입 오류를 확인할 수 있어, 런타임 오류를 줄여줌. 타입을 명시적으로 지정해 데이터의 의도를 명확히 표현하고, 예상치 못한 오류를 미리 방지할 수 있음.

// 예제: 잘못된 타입 전달
function greet(name: string) {
  return `Hello, ${name}`;
}

greet(42); // 컴파일 오류: 'number' 타입을 'string'에 할당할 수 없음

더 나은 코드 자동 완성 지원

TypeScript는 타입 정보를 통해 개발 도중 자동 완성(IntelliSense), 함수 매개변수 힌트, 타입 오류 확인 등 다양한 코드 작성 지원 기능을 제공함. 특히, API가 방대하거나 복잡한 데이터 구조를 사용할 때, 필요한 속성과 메서드 제안이 자동으로 표시되어 코드 작성 속도와 정확성이 크게 향상됨.

interface User {
  id: number;
  name: string;
  email: string;
}

function getUser(user: User) {
  console.log(user.name); // .을 입력하면 'name', 'id', 'email' 자동 제안
}

가독성과 유지보수성이 높은 코드 작성

타입이 명확하게 명시된 코드는 데이터 구조와 함수의 의도가 더 명확해져, 다른 개발자가 쉽게 이해할 수 있음. TypeScript는 특히 규모가 큰 코드베이스에서 복잡한 로직과 데이터 흐름을 더 쉽게 이해하게 해줌. 또한, 타입 정보가 코드의 의도를 드러내기 때문에 문서 작성 부담도 줄어들고, 협업이 쉬워짐.

interface Product {
  id: number;
  name: string;
  price: number;
}

function calculateTotal(products: Product[]): number {
  return products.reduce((total, product) => total + product.price, 0);
}

안전한 리팩토링 지원

TypeScript는 타입 정보를 기반으로 리팩토링 도구가 더욱 강력해짐. 타입 시스템 덕분에 변수를 재정의하거나 함수, 클래스 이름을 변경할 때 모든 참조를 자동으로 찾아 안전하게 변경할 수 있음. 이를 통해 코드베이스가 커져도 유지보수와 리팩토링이 쉬워지고, 코드를 수정해도 의도치 않은 동작을 방지할 수 있음.

TypeScript를 도입할 때 고려할 점 💡

TypeScript는 많은 장점을 제공하지만 도입 시 고려할 몇 가지 사항도 있음.

  • 초기 학습 곡선: TypeScript는 타입 시스템이 추가되면서, JavaScript만 사용하는 개발자에게는 다소 익숙해지기 어려울 수 있음.
  • 설정과 컴파일: TypeScript는 JavaScript로 변환(트랜스파일)하는 과정이 필요하여, 설정과 컴파일 과정에서 추가 시간이 소요될 수 있음.
  • 복잡한 타입 처리: 복잡한 데이터 구조나 함수의 타입을 정의하는 것은 때로는 어렵고, 잘못된 타입 정의로 인해 혼란을 줄 수 있음.
profile
슬기로운개발생활🤖

0개의 댓글