정적 언어와 동적 언어

2021. 10. 12. 10:15Web

 

 자바스크립트를 배우면서 이전에 배웠던 다른 언어들 C, C++, Java 와는 다른점이 많다는 것을 느꼈습니다.

그중 하나가 변수 선언인데, JS의 경우 변수 타입이 여러개가 아니라 일괄적으로 let, const 를 쓰며

함수의 경우도 const 변수에 할당하여 변수처럼 사용 가능하다는 것이었습니다. 상당히 다른 부분이 많더군요.

 

그리하여 이번 시간에는 정적 타입(statically typed) 언어와 동적 타입(dynamically typed) 언어의 차이점에 대해서 알아보고자 합니다.

 

 

정적 타입 언어란?

정적 타입 언어의 예로는 위의 C, C++, Java 등이 있습니다.

정적타입 언어는 컴파일 시 변수의 타입(자료형) 이 결정됩니다.

int x = 15;

String s = "abc";

 

위의 예시와 같이 변수가 선언 됐을 때, x 변수가 int타입으로, s 변수가 string 타입으로 선언됩니다.

즉 변수 타입이 결정이 되며 후에 x = "Hello World!" 와 같은 string 값을 대입하려고 하면 에러를 일으키게 됩니다.

 

 

동적 타입 언어란?

동적타입 언어의 예로는 JavaScript 가 있습니다. 동적 타입 언어는 런타임 시 변수의 ‘타입’이 결정됩니다.

let temp = 1;

temp = “Example String”;

 

위의 예시와 같이 변수의 타입을 선언하지 않고 num이 ‘1’이란 숫자로 선언이 됩니다.

하지만 string으로 새로 선언해도 타입 에러 없이 컴파일 됩니다.

 

위 글에서 런타임과 컴파일 과정이 나왔으므로, 간략하게 두 개념에 관한 내용을 살펴보겠습니다.

 

 

컴파일, 런타임

컴퓨터는 근본적으로 0과 1밖에 이해하지 못합니다.  하지만 우리가 작성하는 코드들은 거의 대부분 고급언어를 사용하기 때문에 결국에는 컴퓨터(CPU)가 이해할 수 있도록 번역을 해주어야 합니다. 

컴퓨터가 이해하는 언어를 기계어라고 하는데, 우리가 만든 소스 코드를 컴퓨터에서 이해할 수 있도록 기계어로 바꾸는, 즉 실행 가능한 파일로 만드는 과정이 필요합니다. 이 과정을 Build 한다고 합니다.

 

기본적으로 빌드 과정에는 총 4가지가 있습니다.

preprocessing  => compilation => assemble => linking

     (전처리)               (컴파일)          (어셈블)       (링크)

 

이중 우리는 컴파일, 런타임에 관하여 간략하게 짚고 넘어가겠습니다.

 

컴파일 과정이란, 개발자에 의해 개발 언어로 작성된 프로그램이 실행 가능한 파일이 되는 과정을 뜻합니다.

 

런타임이란, 컴파일 과정을 마친 응용프로그램이 사용자에 의해 실행되어지는 때(time) 를 말합니다. 프로그램이 실행될 때 존재하고 있는 곳을 말하기도 합니다. 즉 프로그래밍 언어가 구동되는 환경이라고 이해하면 될 것 같습니다.

예를 들면 JavaScript 가 웹 브라우저 환경과 node.js 환경에서 작동되는 면이 있다고 할때 Browser와 node.js를 런타임이라고 볼 수 있습니다.

 

두 개념에 대해 어느 정도 이해가 되셨나요?

다시 본론으로 돌아와서, 정적타입 언어와 동적 타입 언어의 장단점을 비교해 보겠습니다.

 

 

정적타입 언어

장점 :

컴파일 시에 미리 타입을 결정하기 때문에 실행속도가 빠름.

타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성이 높음.

이 때문에 요즘 시장에서는 JacaScript 대신 TypeScript를 많이 사용하기도 한다고 합니다. (타입 스크립트는 자바 스크립트 언어에 타입을 추가한 형식의 언어이다.)

 

단점 : 

매번 코드를 작성할 때 변수형을 결정해 줘야 한다. 따라서 불편하고 번거로울 수 있음.

 

동적타입 언어

장점 :

런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음.

컴파일시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음.

 

단점 :

실행 도중에 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있음. (불안정 할 수 있다.)

 

 

 


참고자료: 출처: https://devuna.tistory.com/82 [튜나 개발일기]

'Web' 카테고리의 다른 글

API & REST API  (0) 2021.11.05
Node.js 특징과 장단점  (0) 2021.11.01