Python

동적 타이핑(Dynamic Typing, 동적 정형)이란?

inmonim 개발개발 2025. 1. 19. 16:09

 

컴파일 단계가 아닌, 실행시간(런타임)에 자료형 검사가 이루어지는 것을 뜻합니다.

def type_example():
    number = 42
    print(number)
    number = "42"
    print(number)

type_example()

>>> 42
>>> 42

 

Python에서는 위와 같이 int 형태로 number라는 변수를 생성한 뒤,

 

string 형태로 바꾸어도(재할당) 해도 아무런 문제가 없습니다.

 

다만 이러한 방식은 정적 타이핑 언어에서는 문제가 많이 발생합니다.

동적 정형과 정적 정형

public class TypeConversionExample {

    public static void main(String[] args) {
        // 정수형으로 선언된 변수
        int number = 42;

        // 같은 변수명을 가진 다른 타입의 객체 생성 시도
        String number = "42";
    }
}

// 에러 발생
>>> Variable 'number' is already defined in the scope

 

동적 정형의 대척점에 있는 것은 정적 정형(Static Typing, 정적 타이핑)으로,

 

자료형 검사가 컴파일 단계에서 실행되는 것을 말합니다.

 

컴파일 단계에서는 작성된 소스 코드가 바이너리 코드로 변환되는데,

 

이 과정에서 변수에 대한 모든 정보가 변환되고, 사용할 메모리 영역이 지정됩니다.

 

즉, 이 단계에서 사용할 메모리까지 지정이 되므로 런타임 환경에 진입한 시점에 변수의 타입은 이미 정해진 상태입니다.

그럼 왜 정적 정형을 쓰는가?

정적 정형의 장점은 다음과 같습니다.

  1. 에러 방지와 안정성
    • 특별한 이유와 수단을 동원하지 않는 한 번 지정된 타입은 프로그램이 종료될 때까지 유지되는 것이죠.
    • 따라서 동적 타이핑 언어에서는 자주 벌어지는 타입 변환 오류가 거의 발생하지 않게 됩니다.
    • 이는 코드를 작성하는 개발자의 입장에서도 타입에 대해 더욱 유의하게끔 만들 수밖에 없습니다.
  2. 속도 및 메모리 최적화
    • 컴파일러가 이미 해당 변수의 자료형을 알고 있기 때문에, 최적화된 기계어 코드를 실행할 수 있습니다.
    • 또한, 메모리 할당과 해제가 더욱 철저하게 이루어지기 때문에 메모리 사용에서도 효율적이라 할 수 있습니다.
    • 컴파일 타임에서 자료형 검사가 끝나기 때문에 런타임에서 굳이 자료형을 검사하지 않습니다.
  3. IDE의 지원
    • python의 경우 mypy를 활용하면 되지만, 이를 위한 많은 모듈과 라이브러리를 요하게 됩니다.
    • 소소하지만 코드를 작성하는 때에 큰 도움이 되는 부분이라 생각합니다.
    • 정적 타이핑은 IDE 입장에서도 타입 에러를 표시해주기 쉬워집니다.

그럼 동적 정형은 느리기만 한가?

런타임에서 타입 검사가 이루어지기 때문에 느릴 수밖에 없습니다.

 

하지만 프로그래머 입장에서는 편의성과 유연성이라는 매우 큰 효용을 가져다줍니다.

  1. 유연성
    • 얼마든지 새로운 값과 타입을 지정해줄 수 있다는 점은 코딩에 큰 유연성과 편의성을 제공합니다.
    • 아마 이 단 하나의 이유가 동적 정형을 쓰는 가장 큰 이유가 아닐까 싶습니다.
  2. 코드의 간결성과 생산성 확대
    • java나 Kotlin을 사용하다가 python으로 돌아오면 빠른 걸 넘어서 허전할 정도입니다.
    • 변수의 선언문이 매우 간결해집니다.

 

 

 

https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C%ED%98%95_%EC%B2%B4%EA%B3%84#%EC%A0%95%EC%A0%81_%EC%A0%95%ED%98%95

 

자료형 체계 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서 자료형 체계(type system)는 값, 표현식, 함수, 모듈 등을 분류하는 규칙의 집합이다. 보다 형식적으로는 “계산될 값을 분류하여 특정한 종류의

ko.wikipedia.org