자바스크립트는 동적언어입니다.
자바스크립트는 컴파일 시가 아니라 런타임 시 변수의 타입이 결정됩니다.
자바스크립트는 컴파일이 되지만 문맥상 인터프리터 언어로 분류됩니다.
모던 자바스크립트 컴파일러는 거의 런타임 내에서 빠르게 컴파일을 수행합니다.
정적 언어와 달리 JavaScript, Phyton 등 같은 동적 언어는 컴파일 시가 아니라 런타임 시 변수의 타입을 결정됩니다.
고정된 타입이 없어서 같은 변수에 여러 타입의 값을 자유롭게 할당할 수 있습니다.
let number = 10;
let string = 'string';
number = 'hello';
string = 1;
console.log(typeof number); // string
console.log(typeof string); // number
런타임 시 타입이 결정되기 때문에 유연성이 높습니다.
컴파일 시 타입을 명시해주지 않아도 되기 때문에 개발 속도가 향상 됩니다.
런타임 시 타입 자동 변환을 통해 타입 에러를 발생 시킬 수 있습니다.
런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워집니다.
정적 언어는 컴파일 시 변수의 타입을 결정하는 언어입니다.
C나 Java와 같은 언어는 정적 타입 언어로 변수 선언 시 변수에 저장할 값의 종류를 사전에 타입 지정하여야 합니다.
컴파일 시 타입에 맞지 않는 값이 있으면 에러가 발생합니다.
int number = 10;
char string = "string";
num = "string"; // 에러 발생
타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성이 높습니다.
컴파일 시에 타입을 결정하기 때문에 실행속도가 빠릅니다.
컴파일
컴파일러를 통해 프로그래밍 언어를 CPU가 이해할 수 있는 기계어로 변환
런타임
프로그램이 실행되고 있는 동안의 동작
정적 언어는 컴파일 시 타입을 결정하기 때문에 에러 발생을 줄여 안정성이 높고
실행 속도가 빠릅니다. 하지만 타입을 미리 결정하기 때문에 개발 환경에서 번거로움이 생길 수 있습니다.
동적 언어는 런타임 시 까지 타입 결정을 끌고가기 때문에 유연성이 높아 개발 속도는 향상이 됩니다. 하지만 예상치 못한 타입 에러를 발생 시킬 수 있는 단점이 있습니다.