춤추는 개발자

컴파일러와 인터프리터의 차이? 본문

Developer's_til/그외 개발 공부

컴파일러와 인터프리터의 차이?

Heon_9u 2020. 10. 28. 16:13
728x90
반응형

 대표적인 둘의 차이로 컴파일러는 전체 소스코드를 한 번에 번역하고 인터프리터는 소스코드의 각 행을 연속적으로 번역하여 실행한다. 이 정도는 쉽게 기억할 수 있는 둘의 차이지만 좀 더 깊게 살펴보고 이해하겠다.

컴파일러의 특성

  1. 작성된 소스코드를 한번에 번역
  2. 한 번 번역을 하면 실행 파일(목적 파일)을 생성해 메모리에 저장
  3. 다음 실행 시, 저장된 목적 파일을 실행하기 때문에 실행 시간 단축.

인터프리터의 특성

  1. 고레벨 언어를 중간 코드(Intermediate Code)로 변환해 이를 각 행마다 실행.
  2. 일반적으로 컴파일러에 비해 실행시간이 느림.
  3. 하지만, 각 행을 실행하는 도중 에러 발생 시, 이후 작성된 코드를 살펴보지 않음
  4. 보안적인 관점에서 도움이 됨.

자바를 통해 컴파일러와 인터프리터의 차이를 다시 알아보자

출처: https://opensourceforgeeks.blogspot.com/2013/03/difference-between-compiler-interpreter.html

 자바 컴파일러(javac)는 .java파일을 바이트코드로 쓰인. class파일로 변환합니다. 이때, 바이트코드는 JVM이 해석할 수 있는 기계어에 해당됩니다. 이제 자바 인터프리터는 자바 컴파일러에 의해 변환된 .class파일 내의 바이트코드를 특정 환경의 기계에서 실행될 수 있도록 변환합니다.

 

 

여기서! 왜 자바는 컴파일과 인터프리트를 병행하는 것일까?

 일반적으로 기계어로 변환하는 컴파일러의 경우, 프로그램이 작성된 기계 상에서 실행할 때 매우 효율적이다. 즉, 기계 종류에 소스코드가 종속된다는 의미이기도 하다. 결국, 자바가 컴파일과 인터프리트를 병행하는 이유는 다음과 같다.

 

 플랫폼에 종속되지 않는다.

 우리가 알고있는 Java의 특징 중 하나는 OS에 독립적이라는 것이다. 자바 컴파일러에 의해 생성된 .class파일이 JVM의 인터프리터로 인해 특정 환경에 맞게 변환되기 때문에 가능한 것이다. 하지만 그만큼 컴파일 과정만 필요한 언어에 비해 실행시간 오래 걸리기 때문에 속도가 느리다.

728x90
반응형