정적 vs 동적 vs 점진적 타이핑, 그리고 TypeScript의 동작 원리
2025. 4. 2. 16:57ㆍ프론트엔드/TypeScript(공부)
728x90
🔹 정적 타이핑 시스템 (Java 등)
정의:
코드를 실행하기 전에 변수의 타입을 명시적으로 지정하고, 컴파일 타임에 타입 오류를 검사하는 시스템입니다.
📌 특징
- 모든 변수에 타입을 명시해야 함
- 컴파일 단계에서 타입 안정성(type safety) 확보
✅ 장점
- 타입 불일치로 인한 런타임 오류 감소
- 예측 가능한 코드, 쉬운 디버깅
❌ 단점
- 타입 명시로 인해 코드가 장황해짐
- 유연성이 떨어짐
🔹 점진적 타이핑 시스템 (TypeScript)
정의:
정적 타이핑과 동적 타이핑의 장점을 결합한 형태. 타입 주석이 선택적이며, 타입 추론도 가능.
📌 특징
- 타입을 명시하지 않아도 타입 추론이 가능
- 실행 전 타입 검사로 안정성 확보
✅ 장점
- 정적 안정성과 동적 유연성을 동시에 제공
- 개발 도중 오류를 빠르게 감지 가능
- 최신 JavaScript와 호환됨
❌ 단점
- 컴파일 단계가 추가되어 빌드 과정이 복잡해짐
- 타입 주석 및 설정 파일(tsconfig.json) 관리 필요
🔹 동적 타이핑 시스템 (JavaScript)
정의:
실행 시점에서 변수의 타입을 동적으로 결정하는 방식입니다.
📌 특징
- 변수 타입을 자유롭게 변경 가능
- 별도의 타입 선언이 필요 없음
✅ 장점
- 코드 작성이 간편하고 유연함
- 빠르게 프로토타입 제작 가능
❌ 단점
- 실행 전 오류를 알기 어려움
- 타입 오류로 인한 예외 발생 가능성 증가
🧐 왜 TypeScript를 배워야 할까?
1️⃣ 자바스크립트의 단점 보완
- 자유로운 타입 시스템이 오히려 오류의 원인이 됨
- TypeScript는 정적 검사로 안정성 강화
2️⃣ Node.js의 확장성
- JS가 프론트엔드부터 백엔드까지 커버하는 시대
- 서버, 웹, 앱 어디서든 사용 가능
3️⃣ 타입 시스템의 진화
- TypeScript는 Java/C++ 같은 정적 언어의 안정성과
Python/JS 같은 동적 언어의 유연함을 조합
⚙️ TypeScript의 동작 원리
TypeScript는 개발 시에는 타입 안정성, 실행 시에는 JS와 동일한 퍼포먼스를 제공합니다. 그 과정을 단계별로 정리하면 다음과 같습니다:
🔁 전체 흐름
TypeScript (.ts)
↓
AST 생성
↓
타입 검사 (타입 정보 제거)
↓
JavaScript (.js) 변환
↓
JavaScript AST 생성
↓
Bytecode 생성 및 실행 (V8 등 JS 엔진)
🧩 단계별 설명
1. TypeScript 코드 작성
- .ts 확장자 파일에 타입 주석, 인터페이스, 제네릭 등 사용 가능
2. AST(Abstract Syntax Tree) 생성
- 작성한 코드를 **구문 트리(트리 형태의 구조)**로 분석
3. 타입 검사
- AST 기반으로 **tsc(TypeScript Compiler)**가 타입 검사 수행
- 오류 발생 시 컴파일 중단 또는 경고
- 👉 이 시점에서 타입 관련 코드는 모두 제거
4. JavaScript 코드로 변환
- 타입 제거 후 순수 JS 코드로 컴파일 (.js 파일 생성)
5. JS AST 생성
- JS 엔진(V8 등)이 다시 AST를 생성
6. 바이트코드 생성 및 실행
- 바이트코드로 변환되어 실제 실행됨
728x90
'프론트엔드 > TypeScript(공부)' 카테고리의 다른 글
| 타입 별칭과 인덱스 시그니처: (0) | 2025.04.04 |
|---|---|
| 객체 타입 정의 (0) | 2025.04.04 |
| 원시 타입과 리터럴 타입 (0) | 2025.04.04 |
| 타입스크립트 컴파일러 옵션 완벽 가이드 (0) | 2025.04.02 |
| 자바스크립트 모듈과 ES 모듈 시스템(ESM) 완벽 정리 (0) | 2025.04.02 |