[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
동적 정형의 대척점에 있는 것은 정적 정형으로, 자료형 검사가 컴파일 단계에서 실행되는 것을 말한다.
컴파일 단계에서는 작성된 소스 코드가 바이너리 코드로 변환되는데,
이 과정에서 변수에 대한 모든 정보가 변환되고, 사용할 메모리 영역이 지정된다.
즉, 이 단계에서 메모리까지 지정이 되므로 런타임 환경에서 변수의 타입이 변환되지 않는 것이다.
그럼 왜 정적 정형을 쓰는가?
정적 정형의 장점은 다음과 같다.
- 에러 방지와 안정성
변수가 생성되는 순간부터 자료형이 정해진다.
특별한 이유와 수단을 동원하지 않는 이상 쭉 유지되는 것이다.
이는 코드를 작성하는 개발자의 입장에서도 타입에 대해 더욱 유의하게끔 만들 수밖에 없다.
따라서 동적 정형에서 자주 벌어지는 타입 변환 오류가 거의 발생하지 않게 된다.
- 속도 및 메모리 최적화
컴파일 타임에서 자료형 검사가 끝나기 때문에
런타임에서 굳이 자료형을 검사하지 않는다.
이는 실행 속도를 늘려주며, 자료형 검사로 소모되는 오버헤드를 줄여준다.
- IDE의 지원
동적 타이핑에서는 IDE에서 변수의 타입을 일일이 추적하여 에러를 표시해주기 힘들다.
정적 타이핑은 IDE 입장에서도 타입 에러를 표시해주기 쉬워진다.
소소하지만 코드를 작성하는 때에 큰 도움이 되는 부분이다.
그럼 동적 정형은 느리기만 한가?
Python으로 프로그래밍을 시작하고, 또 깊게 파고 있는 입장이라 정적 정형이 더욱 어색하다.
나에게 default 값이다보니, 사실 잘 체감이 안 되는 편이지만 동적 정형이 가지는 특징은 다음과 같다.
- 유연성
아마 이 단 하나의 이유가 동적 정형을 쓰는 가장 큰 이유가 아닐까 싶다.
변수를 얼마든지 다른 형태로 변환할 수 있다.
- 코드의 간결성과 생산성 확대
변수의 선언문이 매우 간결해진다.
빠르게 코드를 작성할 수 있다.
java를 사용하다가 python으로 돌아오면 빠른 걸 넘어서 허전할 정도다.
이렇듯, 코드 작성의 편의성이 매우 증대된다.
물론 런타임에서 타입 검사가 이루어지기 때문에 이로 인한 오버헤드가 발생한다는 명확한 단점이 있다.