정적 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