Contents

what is 정적(static) & 동적(dynamic) Type

정의

정적 타입과 동적 타입은 프로그래밍 언어에서 변수나 값의 타입에 대한 접근 방식을 나타내는 두 가지 주요 패러다임.

정적 타입 (Static Typing):

  1. 타입 선언: 정적 타입 언어에서는 변수의 타입을 컴파일 시점에 명시적으로 선언합니다. 변수가 어떤 타입을 가질지 사전에 정의해야 합니다.
  2. 컴파일 시 타입 체크: 코드를 실행하기 전에 컴파일러가 변수의 타입을 검사합니다. 이로 인해 컴파일러는 타입과 일치하지 않는 연산이나 잘못된 타입의 변수 사용을 사전에 감지할 수 있습니다.
  3. 명확한 에러 메시지: 정적 타입 언어에서는 타입 에러가 발생하면 컴파일러가 명확한 에러 메시지를 제공하여 개발자가 런타임에 발생할 수 있는 오류를 사전에 파악할 수 있게 합니다.
  4. 예시 언어: Java, C++, TypeScript
1
2
3
4
5
6
7
8
// TypeScript에서의 정적 타입 예시
// 정적 타입 (TypeScript)
let number: number = 42; // 숫자 타입 명시
let text: string = "Hello, TypeScript"; // 문자열 타입 명시

// 컴파일러가 타입 오류를 감지할 수 있음
// 아래 코드는 오류를 발생시킴
// number = "42"; // 에러: 숫자 타입에 문자열 할당 불가

동적 타입 (Dynamic Typing):

  1. 타입 추론: 동적 타입 언어에서는 변수의 타입을 명시적으로 선언하지 않아도 됩니다. 변수는 실행 중에 할당된 값에 따라 동적으로 타입이 결정됩니다.
  2. 런타임 시 타입 체크: 코드 실행 중에 변수의 타입이 동적으로 결정되므로 런타임에 타입 오류가 발생할 수 있습니다.
  3. 유연성: 동적 타입 언어는 더 유연하며, 변수의 타입을 중간에 변경할 수 있습니다. 이는 편리할 수 있지만, 예측하기 어려운 동작을 초래할 수도 있습니다.
  4. 예시 언어: JavaScript, Python, Ruby
1
2
3
4
5
6
7
// JavaScript에서의 동적 타입 예시
// 동적 타입 (JavaScript)
let number = 42; // 숫자
let text = "Hello, JavaScript"; // 문자열

// 자유로운 타입 변경
number = "42"; // 동적으로 타입이 문자열로 변경

차이점:

  • 선언 시점: 정적 타입은 변수를 선언하는 시점에 타입을 명시하고, 동적 타입은 명시적인 선언 없이 런타임에 동적으로 타입이 결정됩니다.

  • 타입 체크 시점: 정적 타입은 컴파일 시점에 타입을 체크하며, 동적 타입은 런타임에 타입을 체크합니다.

  • 에러 발견 시점: 정적 타입은 컴파일 시점에 타입 오류를 발견하므로 런타임 중에는 타입 관련 에러가 발생하지 않습니다. 반면 동적 타입은 런타임 중에도 타입 에러가 발생할 수 있습니다.

두 접근 방식은 각각 장단점이 있으며, 언어의 특성과 개발자의 선호도에 따라 선택됩니다. 정적 타입은 타입 안정성을 높일 수 있지만 코드 작성 시 더 많은 타입 정보를 추가해야 합니다. 동적 타입은 런타임 플렉시빌리티를 제공하지만 런타임 에러 발생 가능성이 높아질 수 있습니다.