포스트

정적 타이핑(Static Typing)과 동적 타이핑(Dynamic Typing) 간단 정리

정적 타이핑(Static Typing)

변수와 표현식의 타입을 컴파일 타임에 결정하는 타입 시스템을 의미합니다.

정적 타이핑을 사용하면 프로그램을 실행하기 전에 타입 오류를 탐지할 수 있습니다.
이는 코드의 안전성을 높이고, 오류를 미리 발견할 수 있어 디버깅 시간을 줄여줍니다.

대표적인 언어
C, C++, C#, Java, Swift, Rust 등

주요 특징 및 장점

  1. 타입 검사 시점
    • 정적 타이핑에서는 타입 검사가 컴파일 타임에 수행됩니다.
    • 이는 프로그램이 실행되기 전에 타입 관련 오류를 잡을 수 있음을 의미합니다.
  2. 명시적 타입 선언
    • 대부분의 정적 타이핑 언어에서는 변수를 선언할 때 그 타입을 명시적으로 지정합니다.
    • 예를 들어, C++에서는 int age = 25;와 같이 변수 ageint 타입임을 명시해야 합니다.
  3. 성능
    • 컴파일러가 변수의 타입을 알고 있으므로 최적화가 더 용이합니다. 이는 실행 시의 성능을 향상시킬 수 있습니다.
  4. 안전성
    • 정적 타이핑은 타입 오류를 미리 잡아낼 수 있으므로, 런타임 오류를 줄여줍니다. 이는 대규모 코드베이스에서 특히 유용합니다.
  5. IDE 및 도구 지원
    • 타입 정보가 명확하므로, IDE(통합 개발 환경)에서 코드 완성, 리팩토링 등의 기능을 더 정확하게 제공합니다. 이는 개발 생산성을 높이는 데 기여합니다.

단점

  1. 유연성 감소
    • 정적 타이핑은 변수의 타입을 미리 지정해야 하므로, 동적 타이핑에 비해 코드가 덜 유연합니다.
  2. 코드 양 증가
    • 타입을 명시적으로 지정해야 하므로 코드의 양이 증가할 수 있습니다. 이는 특히 간단한 스크립트나 프로토타입 작성 시 불편할 수 있습니다.
  3. 러닝 커브
    • 초보자에게는 타입 시스템을 이해하고 사용하는 것에 시간을 투자해야 할 수 있습니다.

동적 타이핑(Dynamic Typing)

변수와 표현식의 타입이 런타임에 결정되는 타입 시스템입니다.

동적 타이핑을 사용하는 언어에서는 변수에 할당되는 값의 타입에 따라 변수의 타입이 결정되며, 타입 검사도 런타임에 수행됩니다.

대표적인 언어
Ruby, Python, JavaScript, PHP, 등

주요 특징 및 장점

  1. 타입 검사 시점
    • 동적 타이핑에서는 타입 검사가 런타임에 수행됩니다. 이는 프로그램 실행 중에 타입이 동적으로 결정됨을 의미합니다.
  2. 명시적 타입 선언 불필요
    • 변수 선언 시 타입을 명시적으로 지정할 필요가 없습니다.
    • 예를 들어, Python에서는 age = 25와 같이 변수에 값을 할당할 때 타입이 자동으로 결정됩니다.
  3. 유연성
    • 코드의 유연성이 높아집니다. 변수의 타입이 고정되지 않으므로, 다양한 타입의 값을 같은 변수에 할당할 수 있습니다.
  4. 간결한 코드
    • 코드가 간결해집니다. 타입을 명시적으로 지정하지 않으므로, 코드 작성이 더 빠르고 간단해집니다.

단점

  1. 런타임 오류
    • 타입 오류가 컴파일 타임에 발견되지 않으므로, 런타임에 오류가 발생할 수 있습니다. 이는 실행 중에 예상치 못한 버그로 이어질 수 있습니다.
  2. 디버깅 어려움
    • 타입 오류가 실행 중에 발생하므로, 디버깅이 어려울 수 있습니다. 특히, 대규모 프로젝트에서 문제를 추적하는 데 어려움이 있을 수 있습니다.
  3. 성능
    • 타입 검사가 런타임에 이루어지므로, 정적 타이핑 언어에 비해 실행 성능이 낮을 수 있습니다.
  4. IDE 및 도구 지원
    • 타입 정보가 명확하지 않으므로, 코드 완성, 리팩토링 등의 기능이 정적 타이핑 언어보다 제한적일 수 있습니다.

참고

타입 추론(Type Inference)에 대한 간단한 정리

이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.