컴파일러
- 전체 소스코드를 보고 명령어 수집하고 재구성
- 고레벨 언어를 바로 기계어로 변환
인터프리터
- 소스코드의 각 행을 연속적으로 분석하며 실행
- 고레벨 언어를 바로 기계어로 번역하지 않고 중간 코드(바이트 코드)로 변환시킨 후 기계어로 변환
인터프리터의 특징 4가지
- 인터프리터는 고레벨 언어를 중간 코드로 변환하고 이를 각 행마다 실행한다.
- 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다 실행시간이 더 빠르다.
- 컴파일러는 전체 소스코드 변환 후 에러를 보고하지만 인터프리터는 각 행마다 실행하는 도중
에러가 보고되면 이후 작성된 코드를 보지 않는다. => 보안적인 관점에서 도움이 된다. - 파이썬은 인터프리터 언어, C,C++은 컴파일 언어, 자바는 컴파일러와 인터프리터 모두 사용한다.
Compiler와 Interpreter가 하는 일 ( 자바 기준 )
컴파일러가 하는 일은?
helloworld를 작성하고 javac 명령어를 통해 helloworld.java 파일을 helloworld.class로 변환하는 것을 수행한다.
helloworld.java -> (javac) -> helloworld.class
응? 컴파일러는 기계어로 변환하는 프로그램이라고 했는데 .class 파일은 바이트 코드인데 이게 기계어인가...?
컴파일러는 소스코드 -> 오브젝트코드, 고레벨 언어 -> 저레벨 언어인 기계어로 변환한다.
여기서의 기계는 하드웨어가 아닌 JVM을 위한 기계어로 변환한다는 뜻이다.
인터프리터가 하는 일은?
자바 컴파일러에 의해 변환된 .class 파일 내의 바이트 코드를 특정 환경의 기계에서 실행될 수 있도록 변환한다.
여기서 Machine language는 JVM을 말한다.
자바는 왜 컴파일과 인터프리터를 병행할까?
바로 기계어로 변환시키는 컴파일러는 프로그램이 작성된 기계상에서 실행할 때 매우 효율적이다. 대부분의 하드웨어
제어 시스템의 프로그래밍 언어가 C언어인 이유이다. 하지만 그렇기 때문에 기계의 종류에 종속될 수밖에 없다.
C언어와 달리 자바는 인터프리팅과 컴파일을 둘 다 사용한다.
① 인터프리팅은 플랫폼에 종속되지 않는다.
② 자바 바이트 코드는 컴퓨터와 프로그램 사이에 별도의 버퍼 역할을 한다.
☞ 이는 보안적인 장점이 될 수 있다.
이로 인해 자바는 플랫폼에 독립적이고 안전한 환경을 제공하면서 동시에 현대 프로그래밍 추상화를 완벽히
수용할 수 있다.
즉, 자바는 컴파일러로 바이트 코드를 생성해 보안적인 장점을 얻음와 동시에 인터프리터를 사용해 플랫폼에
독립적이다.
'cs지식' 카테고리의 다른 글
Java의 컴파일 과정 vs C++의 컴파일 과정 (0) | 2022.02.25 |
---|---|
멀티쓰레드(Multi-Thread) (0) | 2022.02.24 |
비동기적(asynchronous) 실행과 동기적(synchronous) 실행의 차이 (0) | 2022.02.24 |
객체지향과 절차지향 (0) | 2022.02.23 |
운영체제 (0) | 2022.02.20 |