기타

[프로그래밍] 정적 타입 언어와 동적 타입 언어

비번변경 2024. 5. 7. 20:30

개요

업무에서 주로 Python을 많이 사용하고 있는데, 이전에 공부할 때는 C와 Java를 많이 사용했었다. Java로 프로그래밍을 하다가 Python을 하게 되었을 때 크게 느낀 차이 중 하나가 변수 선언 시 데이터 형에 대한 지정 유무였다. 최근에 관련 개념인 정적 타입 언어와 동적 타입 언어에 대해 되짚어보게 되어, 이 글에서 적어두려고 한다.

 

컴파일 (Compile)

프로그램 소스 코드를 작성하고 빌드하면 일반적으로 다음과 과정을 거쳐 컴퓨터가 실행할 수 있는 기계어로 번역된다. 이 과정을 컴파일이라고 한다.

이때 컴파일 과정에서 실행 가능한 파일이 만들어지는 순간까지를 컴파일 타임이라고 하고, 실행 가능한 파일이 실행된 이후를 런타임(Runtime)이라고 한다.

변수의 타입이 컴파일 타임과 런타임 중 어느 시점에 결정되는지를 기준으로 정적 타입 언어(Static Typed)와 동적 타입 언어(Dynamc Typed)를 구분하게 된다.

 

 

정적 타입 언어

정적 타입 언어는 컴파일 타임에 변수의 데이터 타입이 결정된다. C/C++, Java 등의 언어가 대표적인 정적 타입 언어에 해당한다. 컴파일 과정에서 변수의 데이터 타입이 결정되므로 변수를 선언할 때 자료형을 명시적으로 지정해주어야 한다.

string name = "myname";
int score = 100;

데이터 타입 불일치 등으로 인한 문제를 컴파일 과정에서 확인할 수 있다. 또한 컴파일 과정에서 변수의 데이터 타입을 결정하기 때문에 실행 속도가 빠르다는 장점을 가진다.

다만 변수의 데이터 타입 제한으로 인한 유연함이 떨어진다.

 

 

동적 타입 언어

동적 타입 언어는 런타임에 변수의 타입의 결정된다. Python, JavaScript 등의 언어가 동적 타입 언어에 해당된다. 런타임에 변수의 타입이 결정되기 때문에 변수 선언 시 자료형을 명시할 필요가 없다. 정수가 저장된 변수에 문자열을 저장하는 등의 동작도 가능하다.

a = 1
b = []
c = 'myname'

변수에 데이터 타입과 관련된 제한이 없기 때문에 유연성이 높고, 코드 작성할 때 효율적이다.

다만 타입 불일치나 변수 이름 등에서 단순 오타로 인한 오류를 런타임 때 확인할 수 있다는 단점이 있다.

 

 

참고 문서

https://jusung.github.io/Static-and-Dynamic-Typed-Language/

https://algorfati.tistory.com/112

정적타입 언어 (Statically typed) vs 동적타입 언어 (Dynamically typed)