내 머릿속에 명확하게 정리되지 않은 채로
둥둥 떠다니는 개념인 인터프리터와 컴파일러 언어의 차이를 정리해보려고 한다.
프로그래밍 언어는 대부분 인터프리터 언어와 컴파일러 언어로 나뉘게 된다.
📕 1. 인터프리터 언어
- 프로그램을 한 줄씩 읽고 실행하는 방식을 사용한다.
- 컴파일러 언어와 달리 별도의 컴파일 과정이 없으며, 작성한 소스 코드가 직접 실행되는 형태이다.
- 인터프리터 언어의 장점은 다음과 같다.
- 즉시 실행이 가능하다 : 별도의 컴파일 과정이 없기 때문에, 코드를 바로 실행할 수 있다. 그렇기 때문에 개발자가 코드를 작성하고 바로 결과를 확인할 수 있어서 빠른 개발과 디버깅이 가능하다. 한 줄 한 줄 실행하다가 에러가 난 부분을 바로 찾을 수 있기 때문.
- 동적 타이핑 : 파이썬이나 자바스크립트와 같은 인터프리터 언어는 동적 타이핑 기능을 제공한다. 동적 타이핑이란 변수의 타입을 미리 선언하지 않아도 인터프리터가 한 줄 한 줄 읽는 과정에서 자동으로 변수의 타입을 추론해서 부여하는 것을 의미한다. 이 경우 타입을 일일이 지정하지 않아도 되므로, 코드가 간결해지지만 개발자가 의도한 타입과 다른 타입이 부여될 수 있고 이 경우 에러 디버깅이 어렵다는 단점이 되기도 한다.
- 프로그램 수정의 간편함 : 컴파일러 언어는 코드를 수정할 때마다 컴파일 과정을 거쳐야하는데, 만약 프로그램의 덩치가 크다면 컴파일을 하는데 많은 시간이 소요될 수도 있다. 반면에 인터프리터 언어는 별도의 컴파일 과정이 없으므로 소스 코드를 수정하고 바로 실행시킬 수 있기에 프로그램 수정이 간편하다는 장점을 가지고 있다.
- 반면에 실행속도가 느리다는 단점이 존재한다. 코드를 한 줄씩 기계어로 번역하는 방식이기 때문에 즉시 실행은 가능하지만, 실행 속도는 컴파일러 언어보다 느리다.
📕 2. 컴파일러 언어
- 소스 코드 전체를 기계어로 번역하는 과정을 거치는데, 이 과정을 '컴파일' 과정이라고 부른다.
- 컴파일러 언어는 이러한 컴파일 과정을 거친 후 실행 파일을 생성하여 실행하는 방식을 사용한다.
- 쉽게 정리하면, 작성한 코드 전체를 컴퓨터가 이해할 수 있는 기계어로 번역하는 과정과 코드를 한 번에 실행하는 두 단계를 거쳐 진행된다. 즉, 번역과 실행 2단계로 이루어져 있다.
- 컴파일러 언어의 대표적인 예로는 C와 C++, Java가 있다.
- 컴파일러 언어의 장점으로는 다음과 같다.
- 빠른 실행 속도 : 컴파일 과정을 거치면서 최적화된 기계어 코드로 변환되므로, 실행 속도가 빠르다.
- 컴파일 과정을 통해 0과 1로 이루어진 기계어로 번역되기 때문에 프로그램의 코드가 유출되기 상대적으로 어렵다.
- 컴파일 에러(문법적 에러)와 관련된 에러를 컴파일 과정에서 발견할 수 있다.
- 단점으로는 컴파일에 많은 시간이 걸릴 수 있다는 점이 있다. 또한, 코드를 수정하면 컴파일을 처음부터 끝까지 다 해야 하기 때문에 시간이 많이 소요되어 코드 수정이 불편하다.
- 또한, 컴파일된 실행 파일은 특정 OS나 하드웨어 아키텍처에 종속되기 때문에 다른 플랫폼에서 프로그램을 실행하려면 해당 플랫폼에 맞게 다시 컴파일해야 하는 경우가 생길 수도 있다. 이러한 점이 소프트웨어의 이식성을 저해한다.
📕 3. 그렇다면 타입스크립트는 무슨 언어?
인터프리터와 컴파일러 언어에 대해 정리하던 중, 한 가지 의문이 생겼다.
자바스크립트가 가진 동적 타이핑을 해결하기 위해 정적 타이핑을 가진 타입스크립트가 나온 것으로 알고 있었는데,
그러면 타입스크립트는 인터프리터 언어인가? 컴파일러 언어인가?에 대한 궁금증이 생겼다.
찾아보니 타입스크립트가 컴파일러 언어라는 사실을 알게 됐다.
타입스크립트는 자바스크립트에 '정적 타입'을 추가한 언어로, 변수의 타입을 일일이 지정해줘야 한다.
이렇게 타입스크립트로 작성된 소스 코드는 컴파일을 진행하는 시점에 타입 체크를 진행하며 오류를 사전에 발견할 수 있다. 또한 타입스크립트 코드는 타입스크립트 컴파일러(TSC:TypeScript Compiler)를 통해 자바스크립트 코드로 변환되며, 자바스크립트 코드는 이전에 실행되던 것처럼 Node.js와 같은 실행환경에서 실행된다.
컴파일 과정에서 변환된 자바스크립트 코드는 순수한 자바스크립트 코드이며 타입스크립트에 담긴 타입 정보는 컴파일 과정에서 제거되므로 실행 시점에는 영향을 주지 않는다고 한다.
컴파일이란 단어의 정의가 '어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정'이라는 것을 생각하면,
타입스크립트 코드를 자바스크립트 코드로 바꿔주는 것이므로 컴파일러 언어라고 생각하면 이해가 쉬울 것 같다.
'📙CS' 카테고리의 다른 글
[CS] 브라우저 저장소(LocalStorage,SessionStorage,Cookie) (4) | 2024.03.18 |
---|---|
[CS] 웹 브라우저와 브라우저의 렌더링 과정 (0) | 2023.11.06 |
[Bigdata] 빅데이터분석기사 실기 정리 (0) | 2023.06.25 |
[CS][자료 구조][기술 면접] 스택(Stack) 과 큐(Queue) (0) | 2023.04.30 |
[자료 구조][Python] 트리 순회(전위 순회,중위 순회,후위 순회) (0) | 2023.02.26 |