Learning
토픽 137 / 192·프로그래밍 패러다임

타입 시스템 (Type System)

타입 시스템 (Type System)

프로그래밍 언어에서 값, 변수, 표현식에 타입을 부여하고 타입 규칙에 따라 프로그램의 정합성을 검증하는 체계로, 타입 오류를 사전에 방지하여 프로그램 안전성을 보장

목적: 타입 오류 방지, 코드 문서화, 컴파일러 최적화, 리팩토링 안전성, 도구 지원(자동완성)

분류

  • 정적 타이핑(Static Typing): 컴파일 타임 타입 검사, 사전 오류 발견, Java/C/Rust/Go/TypeScript
  • 동적 타이핑(Dynamic Typing): 런타임 타입 검사, 유연성, Python/JavaScript/Ruby
  • 강타입(Strong Typing): 암묵적 타입 변환 제한, 타입 안전, Python/Java/Haskell
  • 약타입(Weak Typing): 암묵적 타입 변환 허용, 유연, C/JavaScript/PHP
  • 점진적 타이핑(Gradual Typing): 정적+동적 혼합, 선택적 타입 명시, TypeScript/Python(mypy)

핵심 개념

  • 타입 추론(Type Inference): 명시적 선언 없이 컴파일러가 타입 결정, Hindley-Milner, var/auto/val
  • 제네릭(Generic): 타입 매개변수화, 재사용 가능한 타입 안전 코드, List, Box
  • 대수적 데이터 타입(ADT): Sum Type(enum/sealed class) + Product Type(struct/data class), 패턴 매칭
  • 공변성/반공변성(Variance): 타입 파라미터의 상속 관계, (공변), (반공변)
  • Null 안전성: Optional/Maybe 타입, Nullable 명시, Kotlin(?/?./!!), Rust(Option)

비교: 정적(안전/빠름/보일러플레이트/Java) vs 동적(유연/빠른개발/런타임에러/Python)

트렌드: 점진적 타이핑 확산(TypeScript, Python type hints), ADT 도입(Kotlin sealed, Java 17 sealed), Null 안전성 기본화

연관: 프로그래밍 패러다임, 컴파일러, 정적 분석, 제네릭, 타입 추론