[Developer] 초보 개발자

Compiler(컴파일러) 와 Interpreter(인터프리터) 차이점.

OnceBH 2021. 1. 4. 20:49
반응형

Compiler(컴파일러) 와 Interpreter(인터프리터) 차이점.

Compiler(컴파일러)와 Interpreter(인터프리터) 차이점. 

 

우리는 무언가 개발하기 위해서 프로그래밍 언어를 사용합니다.

하지만 우리가 작성한 코드는, 사람을 위한 코드이죠.

컴퓨터를 위한 코드는  0과 1의 조합일 것입니다.

즉 컴퓨터는 우리의 코드를 사실 한 줄도 읽지 못한다는 것입니다.

그러하여, Compiler와 Interpreter가 사람이 읽을 수 있는 코드를

컴퓨터가 읽을 수 있는 코드로 바꿔주거나 읽을 수 있게 도와줍니다.

오늘도 어김없이 컴파일러와 인터프리터의 차이를 전혀 비전문적이고,

아주 쉽게 알아보려고 합니다.

 

목차

  1. Compiler란? 컴파일러란?
  2. Interpreter란? 인터프리터란?
  3. JIT Compiler (Just-in-Time)란?
  4. 마치며.

 

1. Compiler란? 컴파일러란?

 

 컴파일러란 우리가 작성한 코드를 컴퓨터로

실행 가능한 코드로 컴파일 뒤 실행파일을 생성시킵니다.

이때 컴파일 도중 컴파일러는 이러한 코드의 명령(들)을 어떤 순서에 맞게

프로세서에 전달해야 하는지 결정을 하게 되며 효율적이게 최적화시킵니다.

또한 이후, 이러한 명령(들)이 또 다른 명령(들)을 기다릴 필요가 없다면,

프로세서는 이러한 명령(들)을 병렬 처리하게 됩니다.

 

장점과 단점.

 

 

장점 :

- 컴파일 도중의 속도는 그다지 빠르지 않을 수 있습니다.

하지만 컴파일을 마친 실행파일은 좀 더 빠르게 실행됩니다.

그러하여 규모가 크거나 코드 자체가 긴 경우에 효과적입니다.

- 컴파일 후 생성된 코드는 더 효과적이고 최적화되어 있습니다.

 

단점 : 

- 컴파일된 파일은 Windows, Mac 그리고 Linux와 같은 OS에 의존적입니다.

그러하여 Windows에서 컴파일된 파일을 Mac에서 실행하려 한다면,

Mac OS에 맞게 다시 컴파일해야 합니다.

또한 버전에 따라서 새로 컴파일해야 할 수 있습니다.

(요즘은 호환 모드를 통해서 어느 정도 오래된 버전과 다른 OS에서도

별다른 컴파일 없이 작동하지만 당연히 그 한계점은 존재합니다.)

- 개발과 버그 fix 과정에서 좀 더 많은 노력을 요합니다.

즉 코드가 바뀌거나, 수정된다면 다시 컴파일해주어야 하기 때문입니다.

 

이러한 Complier를 주로 사용하는 언어는.

C, C++, Pascal, Delphi, Modula, COBOL, Fortran.

등등입니다.

 

 

2. Interpreter란? 인터프리터란?

 

인터프리터란 우리의 코드를 실시간으로 읽고

컴퓨터에게 전달해 줍니다.

이때 인터프리터는 한 번에 모든 코드를 전달하는 것이 아닌

한 줄씩 번역하고 분석한 뒤 프로세서에게 전달, 실행됩니다.

이러한 작업은 코드가 끝날 때까지 실행되고,

작업 중 에러를 만나게 된다면, 곧바로 중지되며 에러를 표시합니다.

그러하여 개발자는 어느 부분에서 에러가 발생했는지

빠르고 쉽게 알 수 있고 빠르게 대처할 수 있습니다.

인터프리터는 추가로 실행파일을 생성하지 않습니다.

그렇기에 인터프리터는 따로 기계어로 변환 키지 않습니다.

단지 프로그래밍 언어와 기계 사이에 중재자 역할을 합니다.

인터프리터는 실시간으로 코드를 한 줄씩 읽고 분석한 뒤 

상응하는 루틴을 인터프리터 자신의 Library를 통해 

프로세서가 원하는 행동을 수행합니다.

 

 

장점과 단점.

 

장점 :

- 실시간으로 인터프리터가 한 줄씩 코드를 읽고 프로세서에게 전달해 주기 때문에,

에러가 발생한다면 인터프리터는 즉각 에러를 표시합니다.

그러하여 개발자는 발 빠르게 에러를 수정할 수 있습니다.

 

단점 :

- 실시간으로 일고 전달한다는 것은 컴파일러보다 빠르다고 느껴질 수 있습니다.

실제로 한 줄씩 읽고 실행시키기에 그 과정은 빠를 수 있습니다.

하지만 결과적으로는 한 줄씩 계속해서 실행하기에 컴파일러보다 느립니다.

-실시간으로 계속해서 읽고 실행한다는 것은 코드가 바뀌거나 수정되면,

다시 처음부터 순서대로 한줄씩 읽어 내려간다는 뜻입니다.

즉 비효율적입니다. 

 

이러한 Interpreter를 사용하는 언어는.

Javascript, PHP, Python, LISP, Perl 등이 있습니다.

 

3. JIT Compiler (Just-inTime)란?

 

 JIT 컴파일러란 쉽게 설명해서 컴파일러와 인터프리터의 결합입니다.

처음 JIT는 우리의 코드를 하드웨어와 무관한 Bytecode로 컴파일합니다.

이러한 Bytecode는 실행 시 2가지 단계를 거치게 됩니다.

1. 가상 프로세서에서 실행 파일이 해석됩니다.

혹은 on-the-fly 컴파일링 됩니다.

2. 가상 프로세서를 통해 해석된 결과를 실제 프로세서에게 전달한 뒤 실행됩니다.

 

JIT 컴파일러의 개념 은은 "write once, run anywhere"에 있습니다.

즉 OS와 하드웨어에 비의존적으로 만드는 목적입니다.

프로그램을 위해 단 한 번의 코딩만 요하며, JIT를 통해

다른 플랫폼, OS에서 작동 가능하게 됩니다.

 

이러한 JIT Compiler를 사용하는 언어는.

C#과 Java가 있습니다.

 

4. 마치며.

 

 오늘은 이렇게 Compiler, Interpreter 그리고 JIT Compiler에 관해

아주 아주 쉽게 알아보았습니다.

컴파일러와 인터프리터의 가장 큰 차이는,

아무래도 파일을 생성시키는가 아닌가라고 생각합니다.,

그 뒤 서로 다른 점이 각자의 장점과 단점이 된다고 생각하시면 됩니다.

그리고 JIT는 한 번의 코딩으로 어느 곳에서든 실행 가능하게 만들기 위한

컴파일러와 인터프리터의 결합이라고 생각하시면 됩니다.

 

코딩을 하다 보면 그렇게 크게 신경 쓰지 않으실지 모릅니다.

하지만 사실 이러한 것은 프로그램에게 상당히 중요합니다.

컴파일러와 인터프리터의 차이에 의해 그리고 언어의 특징에 의해

그 언어가 어느 분야에 쓰이는지 결정된다고 생각해도 무방할 것 같습니다.

(당연히 더 많은 이유들이 있을 것입니다.)

 

항상 제 블로그를 방문해주시고 하나라도 여러분과 더 나눌 수 있어 기쁩니다.

컴퓨터로, 코딩으로 내가 만들고자, 의도하고자 한 프로그램을 만들 때의 기쁨과

완성 후의 성취감은 정말 대단합니다.

하지만 더 디테일하게 이유와 원리를 아는 것도 상당히 중요하죠.

또한 무작정 프로그램 언어를 배우시는 것보다 이러한 특징과 차이에 맞춰,

자신이 원하는 분야에 맞는 언어를 찾아 배우는 것도 아주 중요합니다.

항상 건강하고 도전하세요!!

 

 

완벽한 준비란 없다, 완벽한 준비란 영원히 시작하지 않는 것과 같다.

Es gibt keine perfekte Vorbereitung.

Perfekte Vorbereitung ist das Gleiche, wie nie anzufangen.

반응형