타입 시스템이란, 컴퓨터 프로그래밍 언어에서 핵심 개념으로 포함되는 것으로 언어별 특성으로 나눌 수 있는 중요한 개념이다. 일례로, 많은 언어학자들이 가장 중요하게 연구하는 분야이기도 합니다.

특히나, 컴퓨터프로그램과 수학적인 증명사이에 직접적인 연관 관계가 있다는 것이 밝혀졌기에 중요한 분야가 되었습니다.

물론, 개발자에게서도 중요한 부분이 됩니다. 왜냐하면 Java, C 언어에서 지원하는 타입 시스템이 다르고, 유행하는 Ruby, Python과 같은 언어의 타입 시스템이 다르기 때문입니다.

  • 정적 타이핑
  • 동적 타이핑
  • 강한 타이핑
  • 약한 타이핑

위와 같이 4가지의 분류를 나눌 수 있을 것이다.

각 특징이 다르기 때문에 언어별로도 구분이 가능할 정도였으나, 현 프로그래밍 언어의 진화가 급속도로 빨라지고 있어, 이 언어는 정적 타이핑 언어다 라고 말하기가 어려워졌다. C#의 언어는 진화를 하면서 동적 타이핑도 지원을 하고 있기에 그 분류를 애매하다고 볼 수 있다.

강한 타이핑(Strong Typing)

강한 타이핑이란 ? 언어 두 개의 자료형이 서로 호환되는지 여부를 검사하고, 만약 호환이 되지 않으면, 에러를 발생시키거나 강제로 자료형을 변환함을 뜻한다.

약한 타이핑(Weak Typing)

강한 타이핑과 반대로 의미하는데, 자료형에 대해 검사를 하지도 않고, 프로그래머의 행위 에 책임을 지지 않는다. 그 말은 컴파일러 자체가 메모리 안에 저장 된 데이터가 정수인지 실수인지 관심도 없다는 뜻이다. 그러므로 잘 못된 행동을 하게 되면, 순전히 프로그래머 탓이 된다. 보통 어셈블리어/C 컴파일러의 경우를 말한다.

정적 타이핑(Static Typing)

정적 타이핑이란 자료형을 컴파일타임에 검사 한다는 점이다.

그 말은 타입 바인딩이 컴파일 시점에 이루어진다는 말과 같은 것 같다.

예로 Java언어를 들 수 있을 것이다. 타입 체킹이 거의 대부분 컴파일 Time에 실시 되어 에러를 던져 준다. 물론, Runtime에 확인 가능한 속성들도 있다.

동적 타이핑(Dynamic Typing)

동적 타이핑이란 자료형을 컴파일타임이 아닌 실행시점에 이루어진다는 점이다. 그렇기때문에 에러체크가 컴파일 시점이 아니라 실행시점에 분간 할 수 있다는 점이다. 예를 들면, Ruby 혹은 Python 같은 언어들이 동적 타이핑 언어로 분류 되기도 한다. 요즘의 언어의 추세는 함수형으로 넘어가고 있다.

C#의 경우에도 발전속에서 함수형 패러다임으로 걸어가고 있으며, Java 또한 현재의 레거시 시스템을 끌어 안으면서 동시성 문제에 대해 처리하고자 불변 객체등과 같이 함수형 패러다임을 조금씩 내포하고 있다. 특히나, 스칼라, Erlang등 많은 함수형 언어들이 쏟아지고, Go Lang의 경우 초기버전임에도 불구하고 많은 사람들이 관심을 가지고 있다.