"자료형 체계" 라고 하며, 값/표현식/함수/모듈 등을 분류하는 규칙의 집합이다. (출처: 위키백과)
"we are referring to the data types and the associated manipulation allowed by that language." (출처: https://prateekvjoshi.com/2014/10/03/static-vs-dynamic-typing/)
type system에는 크게 2가지가 있다.
프로그램이 자료형의 규칙을 지키는지 검증하는 과정을 자료형 검사라고 한다. 이 검사가 컴파일 타임 동안 진행되면 정적 타이핑, 런타임 동안 진행되면 동적 타이핑으로 분류한다.
자료형 검사가 컴파일타임 동안 진행되면 정적 타이핑으로 분류한다.
대표적으로 C, C++, JAVA 등의 컴파일 언어가 이에 해당.
검사가 컴파일 동안 진행된다는 것의 의미는, 변수의 자료형을 사전에 지정해야 한다는 것이다.
(C, JAVA를 생각해보면 int
, str
,float
등의 자료형을 미리 지정하고 변수를 선언해야 한다)
#Java
int a;
String b;
a = 1;
b = "hello java";
자료형에 대한 판단을 사전에 하기 때문에 진행 속도가 빠르다.
당연히 type error로 인한 문제점들을 초기에 발견하기 쉽다.
자료형 검사가 런타임 동안 진행되면 동적 타이핑으로 분류한다.
PHP, python, Ruby 등의 인터프리터 언어가 이에 해당된다.
#python
a = 1
b = "hello python"
자료형에 대한 정보를 미리 할 필요가 없다. python만 봐도 해당 자료형이 int
인지 str
인지 지정하지 않고 바로 변수를 선언할 수 있다.
개발자 입장에선 당연히 편하고 상대적으로 light하게 느껴진다.
하지만 런타임 도중 예상하지 못한 에러가 발생할 확률이 높다.
하지만 반드시 동적 타이핑 언어라고 해서 좋은 것만은 아닌 것 같다.
일단 속도가 느리다. 자료형을 처음에 정해주지 않을 뿐, 상황에 맞게 결국 판단해야 하므로 실행 속도가 상대적으로 느릴 수 밖에 없다. 그리고 한 줄 씩 순서대로 기계어로 번역하기 때문에 이 역시 속도를 느리게 하는 특징 중 하나(python의 대표적인 단점).
그리고 정적 타이핑 언어는 초기에 자료형을 지정하므로 훨씬 safe하고 디버깅/유지 및 보수 하기도 쉬운 측면이 있다.
참고 자료
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C%ED%98%95_%EC%B2%B4%EA%B3%84
https://prateekvjoshi.com/2014/10/03/static-vs-dynamic-typing/