런타임은 프로그램이 실행되는 동안의 환경 또는 그 시간을 의미합니다.
그렇다면 컴파일 언어와 인터프리터 언어는 무엇일까요?
또, 자주 발생하는 컴파일 에러와 런타임 에러를 알아봅시다.
컴파일
은 사람이 이해하는 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 언어(기계어나 바이트 코드)로 변환하는 과정을 말합니다. 이러한 과정을 컴파일 타임
이라고 부르기도 합니다. 그리고 이러한 과정을 실행시켜 주는 것을 컴파일러
라고 합니다.
컴파일 에러라고 하면 컴파일 하는 과정에서 에러가 생겼다고 볼 수 있습니다. 그렇다면 어떤 부분에서 문제가 생긴 것일까요?
컴파일은 위에서 사람이 이해하는 언어에서 컴퓨터로 이해할 수 있는 언어로 변환하는 과정이라고 했습니다. 소스코드가 잘못 적힌 경우일 것입니다. Syntax Error
나 Type Check Error
가 바로 컴파일타임에러의 대표적인 예시입니다.
그렇다면 런타임 에러는 런타임이 프로그램을 실행할 때를 뜻하므로, 현재 코드에서는 알 수 없지만 프로그램을 실행했을 때 오류가 발생했다면 그게 런타임 오류
라고 할 수 있습니다. 런타임 에러의 예시로는 Divide By Zero Error
나 잘못된 배열참조에러
, 메모리 오류
, 무한 루프
등이 있습니다.
인터프리터 언어는 실행 시점에 코드를 한 줄씩 읽고 해석하여 바로 실행하는 언어입니다.
이는 JavaScript 코드가 컴파일 과정을 거치지 않고, 실행 시간에 코드가 해석되어 즉시 실행한다는 것입니다.
브라우저나 Node.js 와 같은 런타임 환경에서는 JavaScript 엔진이 이러한 해석 과정을 담당하며, 코드의 해석과 실행을 실시간으로 처리합니다.
이제 자바스크립트 런타임은 어떤 환경으로 작동되는 것인지 간단하게 알아보겠습니다.
런타임 환경은 JavaScript 코드가 실행되는 장소입니다. 주로 두 가지 환경에서 JavaScript 런타임이 작동합니다.
아래 그림은 자바스크립트의 런타임 환경입니다.
여기서 자바스크립트 코드가 어떻게 처리되고 실행되는지를 보여줍니다.
크게 세 부분으로 나누어 설명하자면
이러한 시스템을 통해 JavaScript는 비동기 작업을 효율적으로 처리할 수 있습니다.
TypeScript는 JavaScript의 단점 중 하나인 동적으로 타입을 지정하는 특징을 보완합니다.
동적 타입 지정이란, 변수의 타입이 런타임, 즉 실행 시간에 결정되는 것으로 JavaScript는 대표적인 동적 타입 언어입니다.
배우기 쉽고 유연한 장점이 있지만 동시에 런타임 에러 발생 가능성을 지니고 있습니다.
하지만 TypeScript는 정적 타입 언어로 변수의 타입을 명시적으로 지정해서 사용합니다.
컴파일 단계에서 타입 체크를 하기 때문에 코드 작성 중 타입 오류를 방지하는 타입 체킹 기능인 ‘타입 어노테이션’을 활용 하여 에러를 빠르게 발견할 수 있게 도와주기 때문에 코드를 수정하고 나서 버그가 생기는 것을 방지할 수 있습니다.
JavaScript와 TypeScript는 언어 해석 과정에서 차이를 보입니다.
JavaScript는 인터프리터 언어로, 소스코드를 한 줄씩 읽으면서 명령을 즉시 처리합니다. 이 방식은 코드가 바로 실행되어 컴파일 언어에 비해 빠른 실행이 가능한 장점을 가지고 있습니다.
반면에 TypeScript는 컴파일 언어의 특성을 갖고 있습니다.
컴파일 언어는 소스코드 전체를 컴퓨터가 이해할 수 있는 기계어로 변환한 후 실행하는 언어입니다. 이 과정은 인터프리터 언어에 비해 시간이 더 소요되지만, 변환된 소스코드가 이미 기계어로 되어 있기 때문에 런타임 상황에서는 빠른 실행이 가능합니다.
이렇게 런타임 환경의 중요성과 언어가 코드를 해석하고 실행하는 다양한 방식을 살펴보았습니다.
동적 타입 JavaScript 와 정적 타입 TyprScript 사이에서, 각각의 언어가 가진 장점을 최대한 활용하여 효율적이고 안정적인 코드를 작성하는 것이 중요합니다.
두 언어가 어떻게 서로를 보완하며 개발자들에게 더 나은 도구를 제공하는지 이해함으로써, 효과적이고 효율적인 솔루션을 구축할 수 있습니다.