- 동적타입언어와 정적타입언어의 차이를 알기 위해, 변수의 타입에 대해서 먼저 알아봅시다.
변수의 타입
- 변수에 들어갈 데이터의 타입에 따라 나눈 것입니다. (변수가 저장되는 데이터의 종류)
C language (정적타입 언어)
int, float, char등등 다양한 변수 타입이 존재합니다.
이러한 타입은 컴파일 하면서 결정됩니다.
컴파일 하는 과정에서, #include <stdio.h> 헤더파일의 내용을 삽입힙니다.
그러면서 int i = 5를 발견하면 그에 맞는 stack공간에 변수를 할당하여 5를 넣습니다.
모든 코드를 컴파일하면, 링킹을 하여 exe파일을 생성합니다.
exe파일을 load하고 프로세스가 실행됩니다.
- int i = 5는 exe파일이 실행되기 전에 변수의 타입이 정해집니다.
- 데이터 타입에 1대1 대응하는 선언 키워드가 있습니다.
Javascript (정적타입 언어)
자바스크립트에는 7가지의 데이터 타입이 있습니다.
boolean, null, undefined, number, string, symbol, 그리고 object입니다.
object를 제외한 다른 데이터 타입은 원시타입으로, 변경이 불가능 한 값을 의미합니다.
문자열은 한번 생성되면 그 문자열을 바꿀 수 없습니다. 그래서 strcat를 한다고 해도 새로운 문자열을 만들고 두 문자열을 연결합니다
또한, call by value와 같은 방법으로 전달됩니다.
- new로 할당한 변수는 객체를 리턴합니다(생성자 함수는 객체를 리턴)
- 하지만, 그냥 할당한 것은 원시 값입니다.
선언 이후, 할당되지 않은 변수는 undefined값을 가집니다. JS엔진에 의해 할당된 변수가 assign되기 전에는 자동으로 초기화 합니다.
하지만, object타입은 조금 다릅니다.
- call by reference와 비슷한 방식입니다. (참조에 의한 전달)
데이터 타입과 일대일 대응하지 않습니다(const, let)
JS는 실행하면서 변수의 타입을 정합니다. 그래서 동적언어라고 합니다.
정적언어 VS 동적언어
정적언어는 프로그램이 실행하기 전에 미리 변수의 데이터 타입에 맞는 키워드를 이용합니다. 그래서 컴파일 하는 과정에서 해당 변수의 타입에 필요한 만큼 메모리를 할당합니다. 그리고 exe파일을 실행합니다.
실행시간과 변수의 할당은 무관합니다(동적할당 제외)
동적언어는 실행하는 과정에서 assign한 값에 맞춰서 데이터 타입을 정합니다. 컴파일 시에 자료형이 정해지는 것이 아닙니다.
장점으로는, 개발자가 데이터 타입에 대해서 고려할 필요가 없습니다. 알아서 정해줍니다.
하지만, Type Error가 발생 할 수도 있고, 실행 중에 타입이 정해지기 때문에, 실행시간이 느려질 수 있습니다.
'Backend > Javascript' 카테고리의 다른 글
Function Scope(ES5) vs Block Scope(ES6) (0) | 2019.04.10 |
---|---|
자바스크립트와 다른언어의 차이점 (0) | 2019.03.30 |
자바스크립트의 프로토타입 (0) | 2019.03.30 |