포스트

[python] 동적 타이핑(동적정형)이란?

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

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

1
2
3
4
5
6
7
8
9
10
11
def type_example():
    number = 42
    print(number)
    number = "42"
    print(number)

type_example()

>>> 42
>>> 42

Python에서는 위와 같이

int 형태로 number라는 변수를 생성한 뒤,

string 형태로 바꾸어도(재선언) 해도 아무런 문제가 없다.

다만, java에서는 불가능하다.

동적 정형과 정적 정형

1
2
3
4
5
6
7
8
9
10
11
12
13
public class TypeConversionExample {

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

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

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

동적 정형의 대척점에 있는 것은 정적 정형으로, 자료형 검사가 컴파일 단계에서 실행되는 것을 말한다.

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

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

즉, 이 단계에서 메모리까지 지정이 되므로 런타임 환경에서 변수의 타입이 변환되지 않는 것이다.

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

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

  1. 에러 방지와 안정성

변수가 생성되는 순간부터 자료형이 정해진다.

특별한 이유와 수단을 동원하지 않는 이상 쭉 유지되는 것이다.

이는 코드를 작성하는 개발자의 입장에서도 타입에 대해 더욱 유의하게끔 만들 수밖에 없다.

따라서 동적 정형에서 자주 벌어지는 타입 변환 오류가 거의 발생하지 않게 된다.

  1. 속도 및 메모리 최적화

컴파일 타임에서 자료형 검사가 끝나기 때문에

런타임에서 굳이 자료형을 검사하지 않는다.

이는 실행 속도를 늘려주며, 자료형 검사로 소모되는 오버헤드를 줄여준다.

  1. IDE의 지원

동적 타이핑에서는 IDE에서 변수의 타입을 일일이 추적하여 에러를 표시해주기 힘들다.

정적 타이핑은 IDE 입장에서도 타입 에러를 표시해주기 쉬워진다.

소소하지만 코드를 작성하는 때에 큰 도움이 되는 부분이다.

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

Python으로 프로그래밍을 시작하고, 또 깊게 파고 있는 입장이라 정적 정형이 더욱 어색하다.

나에게 default 값이다보니, 사실 잘 체감이 안 되는 편이지만 동적 정형이 가지는 특징은 다음과 같다.

  1. 유연성

아마 이 단 하나의 이유가 동적 정형을 쓰는 가장 큰 이유가 아닐까 싶다.

변수를 얼마든지 다른 형태로 변환할 수 있다.

  1. 코드의 간결성과 생산성 확대

변수의 선언문이 매우 간결해진다.

빠르게 코드를 작성할 수 있다.

java를 사용하다가 python으로 돌아오면 빠른 걸 넘어서 허전할 정도다.

이렇듯, 코드 작성의 편의성이 매우 증대된다.

물론 런타임에서 타입 검사가 이루어지기 때문에 이로 인한 오버헤드가 발생한다는 명확한 단점이 있다.

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