1. TypeScript 란?
- 마이크로소프트에서 개발한 오픈 소스 프로그래밍 언어이다. 자바스크립트의 상위 집합으로, 정적 타입 시스템을 도입하여 코드의 안정성과 가독성을 향상시켜준다.
- 변수, 매개변수, 함수 등에 명시적인 데이터 타입을 지정할 수 있다. 이는 코드를 작성하면서 발생할 수 있는 실수를 사전에 방지하며, 코드를 이해하기 쉽게 만들어 준다.
- 컴파일러가 코드를 분석하여 잠재적인 버그를 발견하고 보완할 수 있다.
- 클래스, 인터페이스, 제니릭 등을 제공하여 객체 지향 프로그래밍 및 함수형 프로그래밍과의 통합을 지원, 코드의 유연성과 확장성을 향상시켜준다.
- 자바스크립트 런타임 환경에서도 실행될 수 있으며, JavaScript와의 호환성이 뛰어나기 때문에 기존의 프로젝트에도 쉽게 통합할 수 있다. 대규모 프로젝트의 개발 및 유지보수를 보다 쉽고 안전하게 만들어준다.
2. TypeScript 주요 기능
- 정적 타입 지원: 변수, 매개변수, 함수 등에 명시적인 데이터 타입을 지정할 수 있다.
- 타입 추론(Type Inference): Type Annotation을 지정하지 않은 경우에도 변수의 사용을 분석하여 타입을 추론한다.
- 인터페이스(Interfaces): 객체의 구조를 정의하는데 사용되며, 클래스나 함수에서 사용될 수 있는 타입을 선언한다. 코드의 가독성과 유지보수성을 높일 수 있다.
- 제네릭(Generics): 타입이 동적인 데이터에 대해 추상화할 수 있도록 도와준다. 함수나 클래스를 작성할 때 다양한 타입의 데이터를 다룰 수 있게 해준다.
- 타입 가드(Type Guards): 런타임에서의 타입 체크를 컴파일 시간으로 가져오는 방법을 제공한다. 이를 통해 타입 안전성을 확보할 수 있다.
- 열거형(Enums): 특정 값들의 집합을 정의할 수 있다. 코드의 가독성을 향상시킬 수 있다.
- 모듈 시스템(Modules): 코드를 노리적으로 구조화하고 재사용성을 높이기 위해 사용된다. 타입스크립트는 모듈을 지원하여 코드를 분할하고 외부 모듈을 가져와서 사용할 수 있다.
- 데코레이터(Decorators): 클래스, 메서드, 프로퍼티 등에 메타데이터를 추가하는 기능을 제공한다.
3. 장점
- 정적 타입 지원: 변수, 매개변수, 함수 등에 명시적인 데이터 타입을 지정할 수 있다. 코드의 안정성을 향상시키고 버그를 사전에 방지할 수 있다.
- 코드 가독성 향상: Type Annotation이 코드를 읽고 이해하기 쉽게 만들어준다. 변수나 함수의 타입이 명확히 지정되어 있기 때문에 코드의 의도를 파악하기 쉽다.
- 강력한 개발 도구 지원: 대부분의 주요 개발 도구(ex: vscode)들이 타입스크립트를 지원하며, 타입 체크, 코드 완성, 리팩토링 등의 기능을 제공하여 개발 생산성을 향상시켜준다.
- 강력한 객체 지향 프로그래밍 지원: 클래스, 인터페이스, 제니릭 등과 같은 객체 지향 프로그래밍의 요소를 지원한다. 코드의 구조화와 재사용성을 높일 수 있다.
- 커뮤니티 및 생태계의 확장성: 타입스크립트를 지원하는 라이브러리와 프레임워크가 계속해서 확장되고 있어, 다양한 개발 환경에서 활용할 수 있다.
- JavaScript와의 호환성: 기존의 JS 코드를 쉽게 타입스크립트로 이전할 수 있다. JS 런타임 환경에서도 실행될 수 있어, 기존의 JS 프로젝트에도 쉽게 통합할 수 있다.
4. 단점
- 학습 곡선: JavaScript에 익숙한 개발자들이 Type Annotation 등의 개념을 익히는 데 시간이 필요하다.
- 개발 시간 증가: 코드 작성에 소요되는 시간이 증가한다.
- 빌드 시간 증가: 정적 타입 검사를 위해 코드를 컴파일해야 하므로, 빌드 시간이 증가할 수 있다. 큰 규모의 프로젝트에서는 이러한 추가적인 빌드 시간이 상당한 부담이 될 수 있다.
- 타입 오버헤드: 타입스크립트는 정적 타입을 강제하기 때문에 코드에 Type Annotation을 추가해야한다. 이로 인해 코드가 길어지고 가독성이 감소할 수 있다. Type Annotation을 지정하지 않을 경우 TypeScript가 타입을 추론하므로, 코드의 일부가 복잡해질 수 있다.
- 일부 JS 라이브러리나 프레임워크는 TypeScript를 완전히 지원하지 않을 수 있다.
'JavaScript Dev. > TypeScript' 카테고리의 다른 글
TypeScript - Generics (0) | 2024.02.27 |
---|---|
TypeScript - 리터럴, 유니온 / 교차 타입 (0) | 2024.02.27 |
TypeScript - 함수 (0) | 2024.02.27 |
TypeScript - 인터페이스(interface) (0) | 2024.02.25 |
TypeScript - 기본 타입 (0) | 2024.02.25 |