Java는 왜 컴파일러와 인터프리터 둘 다 가지는가?

LSM ·2022년 1월 9일
0

1. 컴파일러 vs 인터프리터

컴파일러 & 인터프리터 모두 high-level language를 machine language로 번역한다

컴파일러는 소스 코드(high-level language로 작성) 전체를 링커등을 통해 한번에 번역하여 object file(기계어로 작성)로 만들어 메모리상에 적재한다.

인터프리터는 소스 코드를 한 행씩 중간 코드로 번역 후 실행한다.( 보통 VM안에서 실행됨)

특징 정리 )

  1. 컴파일러는 소스코드 전체를 컴퓨터 프로세서가 실행 할 수 있도록 바로 기계어로 변환한다. 인터프리터는 고레벨 언어를 중간 코드(intermediate code)로 변환하고 이를 각 행마다 실행한다. 이 중간 코드는 다른 프로그램에 의해 실행된다.
  2. 일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다는 실행시간이 빠르다.
  3. 컴파일러는 전체 소스코드를 변환 한 뒤 에러를 보고하지만 인터프리터는 각 행 마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않는다. 이는 보안적인 관점에서 도움이 된다.
  4. 예를 들어 파이썬은 인터프리트 언어이고 C, C++는 컴파일 언어이다. 자바는 컴파일러와 인터프리터 모두 사용한다.

2. Java의 컴파일러와 인터프리터의 역할?

  1. 자바 컴파일러는 .java 파일을 javac(java compiler)가 바이트코드로 쓰여진 .class 파일로 변환한다.
    즉, 컴파일러는 자바 소스코드를 JVM을 위한 기계어로 변환한다
  1. 자바인터프리터는 자바컴파일러에 의해 변환된 클래스파일내의 바이트코드를 특정 환경의 기계에서 실행될 수 있도록 변환한다. 다른 예를 들어보면 IBM PC에서 작성된 프로그램이 매킨토시에서도 실행할 수 있도록 변환하는다는 의미이다.


3. Java는 왜 컴파일러와 인터프리터 모두 사용하는 가?

바로 기계어로 변환하는 컴파일러의 경우는 프로그램이 작성된 기계상에서실행할 때 매우 효율적으로 실행된다. 이는 대부분의 하드웨어 제어 시스템의 프로그래밍언어가 C인 이유이다. 그러나 이와 동시에 기계 종류에 종속된다는 말이기도 하다. 자바 인터프리팅은 자바 컴파일러를 통해 생성된 클래스파일을 기계어로 변환한다.

  1. 인터프리팅의 첫 번째 장점은 플랫폼에 종속되지 않는다.
    물론 컴파일러를먼저 수행하고 인터프리팅 하는 과정 때문에 컴파일 과정만 필요한 프로그래밍 언어보다는 속도가 느리다.
  1. 두 번째 장점은 자바 바이트코드는 컴퓨터와 프로그램 사이에 별도의 버퍼역활을 한다.
    이는 보안적으로 장점이 될 수 있다. 인터넷이나 기타 매체를 통해 신뢰할 수 없는 프로그램을 다운받거나 실행할 수 있는 경우 어느정도 보장 될 수 있다. 자바 인터프리터를 사용함으로써 바이러스나 기타 악성 프로그램에 대응 하는 가드 같은 보안 계층에 의해 보호 될 수 있다는 의미이다. 자바와 자바 바이트 코드의 조합으로 플랫폼에 독립적이고 안전한 환경을 제공하면서 동시에 현대 프로그래밍 추상화를 완전히 수용한다.

4. 결론

자바에서는 인터프리터 특성 중 한 줄씩 읽는 특성에 집중하기 보다, 플랫폼에 독립적으로 작동할 수 있게 사용됨을 중점을 두고 인터프리터를 이해하는 것이 더 좋을 것 같다는 의견이 있다.


5. 참고자료

https://blog.naver.com/PostView.naver?blogId=ehcibear314&logNo=221228200531&redirect=Dlog&widgetTypeCall=true&topReferer=https%3A%2F%2Fvelog.io%2F&directAccess=false
https://velog.io/@huttels/2020-04-19

profile
개발 및 취준 일지

0개의 댓글