TypeScript 궁금한 점(기초)
타입스크립트의 목적과 주 기능 등을 알려줘
TypeScript는 Microsoft에 의해 개발된 자바스크립트의 상위 집합 언어입니다. 자바스크립트 코드에 타입을 추가하여 개발하는 과정에서 발생할 수 있는 오류를 사전에 발견하고, 대규모 애플리케이션의 개발 및 유지보수를 용이하게 만들어 주는 것이 주요 목적입니다. TypeScript는 개발자가 코드에 대한 더 명확한 의도를 표현할 수 있게 하여, 개발 팀 내에서 또는 개인 프로젝트에서도 생산성과 코드의 품질을 향상시키는 데 기여합니다.
TypeScript의 주요 목적
- 타입 안정성 제공: 컴파일 시간에 타입을 체크하여 실행 시 발생할 수 있는 일부 오류를 사전에 방지합니다.
- 개발자 생산성 향상: 코드 자동완성, 인터페이스, 고급 타입 추론 등의 기능을 통해 개발 과정을 보다 효율적으로 만듭니다.
- 대규모 애플리케이션 지원: 모듈 시스템, 네임스페이스, 데코레이터 등의 기능을 통해 대규모 애플리케이션의 구조를 관리하기 쉽게 합니다.
- 자바스크립트 생태계와의 호환성: 자바스크립트의 모든 코드는 유효한 TypeScript 코드입니다. 기존 자바스크립트 프로젝트에 점진적으로 도입할 수 있습니다.
주요 기능
- 정적 타입 지정: 변수, 함수 매개변수, 반환 값 등에 타입을 지정할 수 있습니다. 이를 통해 개발자는 코드의 의도를 더 명확히 할 수 있고, 컴파일러는 타입 오류를 사전에 감지할 수 있습니다.
- 인터페이스와 클래스: 객체 지향 프로그래밍 패턴을 사용하여 애플리케이션을 구조화할 수 있습니다. 인터페이스를 통해 객체의 형태를 정의하고, 클래스를 통해 재사용 가능한 컴포넌트를 만들 수 있습니다.
- 제네릭: 타입 변수를 사용하여 함수, 클래스, 인터페이스를 다양한 타입으로 재사용할 수 있습니다. 이를 통해 코드의 유연성과 재사용성을 향상시킬 수 있습니다.
- 고급 타입: 유니언 타입, 인터섹션 타입, 타입 가드, 조건부 타입 등의 고급 타입 시스템을 통해 복잡한 타입의 조작을 수행할 수 있습니다.
- ES6+ 지원 및 다운레벨링: 최신 ECMAScript 기능을 사용하고, 이를 이전 버전의 자바스크립트로 컴파일할 수 있습니다. 이로 인해 최신 언어 기능을 사용하면서도 다양한 브라우저와 환경에서의 호환성을 유지할 수 있습니다.
TypeScript의 이러한 목적과 기능은 개발자가 보다 안전하고, 유지보수가 쉬우며, 팀 작업에 용이한 코드를 작성할 수 있게 돕습니다. TypeScript는 점차적으로 자바스크립트 생태계에서 중요한 위치를 차지하고 있으며, 다양한 프레임워크와 라이브러리에서도 널리 사용되고 있습니다.
타입스크립트 컴파일은 수동으로 진행해야 하나? 컴파일을 해야한다고 해서
TypeScript 컴파일 과정은 자동화할 수 있으며, 실제로 대부분의 현대 개발 환경에서는 이를 자동화하는 것이 일반적입니다. 수동으로 컴파일하는 방법도 있지만, 개발 과정의 효율성을 높이기 위해 다양한 도구와 설정을 사용하여 컴파일 과정을 자동화합니다.
자동 컴파일 설정 방법:
1. TypeScript 컴파일러의 감시 모드
TypeScript 컴파일러(tsc)는 파일 시스템의 변경을 감시하고 자동으로 컴파일할 수 있는 감시 모드(--watch 또는 -w 플래그)를 제공합니다. 프로젝트 디렉토리에서 다음 명령어를 실행하면, 파일에 변경이 발생할 때마다 자동으로 TypeScript 파일을 컴파일합니다:
tsc --watch
2. 빌드 도구를 사용한 자동화
Webpack, Rollup, Parcel 등의 모던 빌드 도구는 TypeScript를 자바스크립트로 컴파일하는 과정을 자동화하는 플러그인 또는 로더를 제공합니다. 예를 들어, Webpack의 경우 ts-loader 또는 awesome-typescript-loader를 사용하여 TypeScript 파일을 자동으로 컴파일하고 번들링할 수 있습니다.
3. npm 스크립트
package.json 파일에서 npm 스크립트를 정의하여 개발 서버 시작, 빌드 등의 과정에서 TypeScript 컴파일을 포함시킬 수 있습니다. 예를 들어, tsc 커맨드를 build 스크립트에 포함시켜 빌드 프로세스를 자동화할 수 있습니다:
{
"scripts": {
"build": "tsc && other-build-step",
"watch": "tsc --watch"
}
}
4. 통합 개발 환경(IDE)과 에디터
많은 통합 개발 환경(IDE)과 코드 에디터는 TypeScript를 직접 지원하며, 파일 저장 시 자동으로 컴파일하는 기능을 제공합니다. 예를 들어, Visual Studio Code, WebStorm 등은 TypeScript 프로젝트에서 매우 편리한 개발 경험을 제공합니다.
결론
TypeScript 컴파일을 수동으로 진행할 수도 있지만, 개발 프로세스의 효율성을 위해 대부분 자동화를 선호합니다. 각 팀과 프로젝트의 요구 사항에 맞는 자동화 방법을 선택하여 적용하는 것이 좋습니다.
그러면 단점으로는 따로 TypeScript를 컴파일 해야만 해?
TypeScript를 사용할 때 주요한 단점 중 하나는 실제로 실행 가능한 JavaScript 코드를 얻기 위해 TypeScript 코드를 컴파일해야 한다는 점입니다. 이 과정은 추가적인 개발 단계를 필요로 하며, 여기에는 몇 가지 고려해야 할 사항들이 있습니다:
컴파일 과정의 필요성
- TypeScript 코드는 브라우저나 Node.js에서 직접 실행될 수 없습니다. 따라서 TypeScript 컴파일러(tsc)를 사용하여 TypeScript 코드를 순수 JavaScript 코드로 변환해야 합니다. 이 변환 과정을 "컴파일" 또는 "트랜스파일"이라고 합니다.
개발 환경 설정
- TypeScript 프로젝트를 설정하고 관리하기 위해 개발 환경을 구성해야 합니다. 이는 TypeScript 컴파일러의 설치 및 구성, 필요한 경우 Webpack, Babel과 같은 추가 도구의 설정을 포함할 수 있습니다.
- 개발자는 tsconfig.json 파일을 통해 컴파일러 옵션을 세밀하게 조정할 수 있으며, 이는 프로젝트의 요구 사항에 따라 다양하게 설정될 수 있습니다.
러닝 커브
- TypeScript는 JavaScript에 타입 시스템을 추가함으로써 보다 안정적이고 관리하기 쉬운 코드를 작성할 수 있게 해줍니다. 하지만, 이를 위해 타입 시스템과 TypeScript의 고급 기능들을 학습해야 하는 러닝 커브가 있습니다.
- 타입 선언, 제네릭, 인터페이스, 네임스페이스와 같은 TypeScript의 기능들은 JavaScript 개발자에게는 새로울 수 있으며, 이러한 개념들을 익히는 데 시간이 걸릴 수 있습니다.
빌드 시간
- 컴파일 과정은 프로젝트의 크기와 복잡성에 따라 추가적인 빌드 시간을 필요로 할 수 있습니다. 큰 규모의 프로젝트에서는 컴파일 시간이 개발 과정에서 눈에 띄게 느껴질 수 있습니다.
이러한 단점들에도 불구하고, TypeScript는 타입 안정성, 자동화된 리팩토링, 개발 도구의 강력한 지원 등의 이점으로 인해 많은 개발자와 기업들에게 널리 채택되고 있습니다. 컴파일 과정이나 개발 환경 설정과 같은 초기 단계의 노력이 장기적으로 보았을 때 프로젝트의 품질과 유지보수성을 크게 향상시킬 수 있기 때문입니다.
typescript를 동작하도록 하는 프레임워크나 라이브러리가 잇어?
TypeScript는 자바스크립트에 타입을 추가한 언어로, 자바스크립트의 상위 집합입니다. TypeScript 코드는 직접적으로 브라우저나 Node.js에서 실행될 수 없습니다. 대신, TypeScript 코드는 먼저 자바스크립트 코드로 "트랜스파일"되어야 합니다. 이 트랜스파일 과정은 TypeScript 컴파일러(TSC)나 다른 빌드 도구를 통해 수행됩니다. TypeScript를 지원하고 작업을 용이하게 해주는 여러 프레임워크와 라이브러리가 있으며, 이들 중 일부는 아래와 같습니다:
1. TypeScript 자체
- TypeScript 컴파일러 (tsc)는 TypeScript 파일을 자바스크립트 파일로 변환해주는 기본 도구입니다. 컴파일러는 커맨드 라인 인터페이스를 통해 사용할 수 있으며, tsconfig.json 설정 파일을 통해 프로젝트의 컴파일 옵션을 세밀하게 조정할 수 있습니다.
2. Webpack과 ts-loader / awesome-typescript-loader
- Webpack은 모듈 번들러로, ts-loader나 awesome-typescript-loader와 같은 로더를 사용하여 TypeScript 파일을 자바스크립트로 변환하고, 하나의 파일로 번들링하는 과정을 자동화할 수 있습니다.
3. Babel
- 최신 버전의 Babel은 TypeScript 코드를 변환할 수 있는 기능을 제공합니다. Babel을 사용하면 TypeScript의 타입 검사 기능을 제외하고 코드를 자바스크립트로 변환할 수 있으며, 이는 프로젝트에서 별도의 타입 검사 단계를 추가해야 함을 의미합니다.
4. Create React App
- Facebook에서 제공하는 React 프로젝트를 쉽게 시작할 수 있게 해주는 도구인 Create React App은 TypeScript를 기본적으로 지원합니다. 새 프로젝트를 시작할 때 TypeScript 템플릿을 선택하기만 하면 됩니다.
5. Angular
- Angular 프레임워크는 TypeScript를 기본 언어로 사용합니다. Angular CLI를 사용하여 프로젝트를 생성하면, TypeScript 설정이 사전 구성되어 있어 바로 개발을 시작할 수 있습니다.
6. Next.js
- 서버 사이드 렌더링을 지원하는 React 프레임워크인 Next.js도 TypeScript를 기본적으로 지원합니다. Next.js 프로젝트에서 TypeScript를 사용하기 위해 필요한 설정이 최소화되어 있으며, 간단한 설정으로 TypeScript 프로젝트를 시작할 수 있습니다.
7. Vue CLI
- Vue.js 프로젝트를 위한 공식 CLI인 Vue CLI도 TypeScript를 지원합니다. Vue CLI를 사용하여 프로젝트를 생성할 때 TypeScript 옵션을 선택할 수 있으며, 이를 통해 TypeScript로 Vue 컴포넌트를 작성할 수 있습니다.
이 외에도 TypeScript를 지원하는 많은 라이브러리와 툴이 있으며, 대부분의 현대 웹 개발 도구들은 TypeScript를 일정 수준에서 지원하고 있습니다. TypeScript를 사용하면 개발 과정에서의 타입 검사를 통해 오류를 미리 잡아내고, 대규모 애플리케이션을 보다 쉽게 관리할 수 있습니다.
TypeScript는 하나의 언어라기 보다 프레임워크나 라이브러리에 가까워서 어떤 언어든 채용될 수 있다면 쓰면 되는 거네? TypeScript의 범주는 뭐야? 언어인가?
TypeScript는 하나의 프로그래밍 언어로, 자바스크립트의 상위 집합입니다. 이는 TypeScript가 자바스크립트의 모든 기능을 포함하고 있으며, 추가적으로 타입 시스템과 몇 가지 기능을 더한 것을 의미합니다. 따라서 TypeScript는 프레임워크나 라이브러리보다는 "언어"의 범주에 속합니다.
TypeScript의 핵심 목적 중 하나는 개발자들이 보다 안전하게 코드를 작성할 수 있도록 돕는 것입니다. 이는 컴파일 시점에 타입 체크를 통해 실행 전에 오류를 찾아내고, 큰 규모의 애플리케이션을 개발하고 유지보수하는 과정에서 발생할 수 있는 문제들을 줄여줍니다. TypeScript는 개발자들이 변수, 함수의 매개변수, 반환값 등에 명시적인 타입을 지정할 수 있게 해주며, 이러한 타입 정보는 컴파일 과정에서 제거되어 순수 자바스크립트 코드가 생성됩니다.
TypeScript를 사용하면 다음과 같은 이점이 있습니다:
- 타입 안정성: 컴파일 시점에 타입 오류를 찾아낼 수 있어 런타임 오류의 가능성을 줄일 수 있습니다.
- 도구의 지원: 코드 완성, 리팩토링, 타입 체크 등을 지원하는 편리한 개발 도구를 사용할 수 있습니다.
- 가독성과 유지보수성: 코드에 타입 정보가 포함되어 있어 다른 개발자들이 코드를 이해하기 쉬워지고, 대규모 프로젝트의 유지보수성이 향상됩니다.
이러한 이점 때문에 TypeScript는 다양한 프레임워크와 라이브러리에서 널리 사용됩니다. 예를 들어, Angular는 TypeScript를 기본 언어로 채택하고 있으며, React와 Vue.js도 TypeScript와 함께 사용할 수 있도록 공식적으로 지원합니다.
요약하자면, TypeScript는 자바스크립트를 기반으로 한 프로그래밍 언어이며, 프레임워크나 라이브러리에 독립적으로 사용될 수 있습니다. 어떤 프레임워크나 라이브러리든 TypeScript를 채용할 수 있으며, 이를 통해 더 안전하고 관리하기 쉬운 코드를 작성할 수 있습니다.
타입스크립트 문법과 구조 알려줘
TypeScript의 핵심 목적은 개발자가 타입을 명시적으로 선언할 수 있게 함으로써 JavaScript의 유연성을 유지하면서도 코드의 안정성을 향상시키는 것입니다. 이를 통해 컴파일 타임에 오류를 잡아내고, 대규모 프로젝트의 관리를 용이하게 만듭니다. 아래는 TypeScript의 몇 가지 기본 문법과 구조에 대한 개요입니다.
기본 타입
TypeScript는 JavaScript의 기본 타입을 모두 지원하며, 몇 가지 추가적인 타입을 제공합니다.
- Boolean: true 또는 false
- Number: 모든 숫자는 부동 소수점 값입니다.
- String: 텍스트 데이터 타입입니다.
- Array: 배열 타입은 두 가지 방식으로 선언할 수 있습니다. number[] 또는 Array<number>
- Tuple: 길이와 각 요소의 타입이 고정된 배열을 표현합니다. 예: let x: [string, number];
- Enum: 열거형은 숫자 값 집합에 더 읽기 쉬운 이름을 부여합니다.
- Any: 모든 타입의 값을 허용합니다. 타입 검사를 하지 않고, 그 값이 할 수 있는 모든 것을 할 수 있게 합니다.
- Void: 일반적으로 함수에서 반환값이 없을 때 사용합니다.
- Null과 Undefined: JavaScript의 해당 타입과 동일합니다.
- Never: 절대 발생할 수 없는 타입을 나타냅니다.
인터페이스
인터페이스는 타입의 형태를 정의하며, 컴파일 후에는 제거됩니다. 객체의 구조를 설명하기 위해 주로 사용됩니다.
interface Person {
name: string;
age: number;
}
클래스
TypeScript에서 클래스는 ES6의 클래스에 기반합니다. 클래스 멤버에 대한 접근 제어자(public, private, protected)를 추가할 수 있으며, 인터페이스를 구현할 수도 있습니다.
class Student {
constructor(public name: string, public age: number) {}
}
함수
TypeScript에서 함수의 매개변수와 반환 값에 타입을 지정할 수 있습니다.
function add(x: number, y: number): number {
return x + y;
}
제네릭
제네릭을 사용하면 컴포넌트(함수, 클래스, 인터페이스)를 다양한 타입으로 재사용할 수 있습니다.
function identity<T>(arg: T): T {
return arg;
}
고급 타입
TypeScript는 유니온 타입, 인터섹션 타입, 타입 가드, 조건부 타입 등 다양한 고급 타입을 제공하여 복잡한 타입 조작을 가능하게 합니다.
- 유니온 타입: number | string 처럼 두 타입 중 하나를 의미합니다.
- 인터섹션 타입: 여러 타입을 모두 만족하는 하나의 타입을 의미합니다. 예: Person & Serializable & Loggable
- 타입 가드: 특정 타입이라는 것을 확인하는 코드 패턴입니다.
- 조건부 타입: 타입의 조건에 따라 타입을 결정합니다.
TypeScript의 이러한 특성들은 코드의 안정성을 향상시키고, 대규모 애플리케이션을 개발 및 유지보수하는 과정을 돕습니다.
'개인 개발 공부 일지' 카테고리의 다른 글
| PHP 입문과 궁금했던 점 (0) | 2024.03.27 |
|---|---|
| Clasic ASP (1) | 2024.03.27 |
| JS, JSX 차이와 같은 점 (React) (1) | 2024.03.20 |
| MSA 인텔리제이로 프론트엔드, 백엔드 동시에 로컬에서 각각의 인텔리제이 인스턴스로 작업시 브랜치 공유되어 작업하기 곤란한 사항_2 (해결) (0) | 2024.03.20 |
| MSA 인텔리제이로 프론트엔드, 백엔드 동시에 로컬에서 각각의 인텔리제이 인스턴스로 작업시 브랜치 공유되어 작업하기 곤란한 사항 (1) | 2024.03.14 |