[Java] 컴파일언어인가 인터프리터 언어인가.

아몬드봉봉·2024년 1월 8일
0

Java

목록 보기
15/17

컴파일 언어란

컴파일 언어는 소스 코드를 컴파일한 후, 기계어를 메모리와 CPU를 통해 읽어서 실행하는 방식으로 동작하는 언어를 말한다. 컴파일 후, 프로세서가 실행할 수 있도록 변환된 기계어 코드를 별도의 파일에 저장한다.

특징

  • 컴파일을 하기 때문에 규모가 큰 프로그램일 경우 컴파일하는 데 오랜 시간이 소요된다.
  • 한번 컴파일하면, 이후에는 기계어를 읽어 들이기 때문에 실행속도가 빠르다.
  • 기계어를 통해 프로그램이 실행되기 때문에 프로그램의 소스코드가 유출되기 어렵다.
  • OS마다 기계어가 상이하기 때문에 OS에 따라 작업을 다르게 해주어야 한다.
  • 컴파일러가 소스코드를 기계어로 변환하면 기계어가 메모리에 적재된다.

장점

  • 컴파일 단계와 실행 단계가 분리되어서 실행 속도가 빠르다.
  • 컴파일 단계에서 에러가 발생하면 프로그램이 실해되지 않아 런타임 환경 전에 오류를 수정할 수 있다.
  • 개발자가 메모리 관리, CPU 사용과 같은 하드웨어 측면에 대한 많은 제어 권한을 가지므로 PC 자원을 효율적으로 관리할 수 있다.

단점

  • 코드에 수정이 있을 때마다 빌드 과정을 거쳐야해서 전체적으로 개발 기간이 늘어난다.
  • 컴파일 시 지정된 플랫폼에 최적화 되도록 만들어져서 실행환경에 제약이 있으므로 플랫폼에 맞게 컴파일 해야해서 개발 기간이 늘어난다.

인터프리터 언어란

소스코드를 컴파일하지 않고 코드를 한 줄씩 읽어서 바로 실행하는 언어이다. 빌드 과정을 거치지 않기 때문에 번역과 실행이 동시에 이루어진다.

특징

  • 프로그램을 수정하고 컴파일 해야하는 과정을 생략할 수 있다.
  • 오류가 발생하면 해당 부분부터 실행되지 않으므로 오류 발견이 쉽다.

장점

  • 빌드 과정이 없어서 바로 실행가능하다.
  • 코드 수정이 용이해서 개발 기간이 컴파일 언어보다 적다.
  • 플랫폼에 독립적이기 때문에 각 플랫폼에 지원하는 인터프리터만 있으면 실행 가능하다.

단점

  • 프로그램 실행 전에는 버그를 발견하기 어렵다.
  • 실행할 때마다 인터프리터 과정이 반복되므로 실행 속도가 느리다.

그렇다면 자바는 어떤 언어인가.

Java는 컴파일 언어가 될 수 있고 인터프리터 언어가 될 수 있다. Java는 다른 컴파일 언어들이 동작하듯 Java 컴파일러가 JVM이 실행할 수 있는 바이트 코드로 번역을 해준다. 그리고 컴파일된 파일을 실행하기 위해 JVM이 컴퓨터가 이해할 수 있는 2진 코드로 번역하기 위해 Java 인터프리터를 이용하여 한 줄씩 읽으면서 번역 후 실행한다.

Java는 기존 언어들의 단점이었던 운영체제와 하드웨어에 영향을 받는 부분을 없애고자 인터프리터 언어를 컴파일을 진행 후 인터프리터로 변환하는 작업을 진행하도록 처리했다.

JIT 컴파일러

JIT 컴파일러란 자바에서 속도에 대한 이슈를 해결하고자 노력하면서 등장하게 됐다. JIT 컴파일러는 프로그램이 실행되는 동안 JVM이 자주 사용되는 코드를 찾게 되면 해당 코드를 기계어로 컴파일을 한다. 컴파일 과정에서 어느정도 시간이 소요되지만 컴파일된 코드는 나중에 다시 실행될 때 빠르게 재사용 되므로 프로그램 전체 실행 시간을 줄이는데 기여를 하게 된다.


출처

https://jooona.tistory.com/157
https://noodabee.tistory.com/entry/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%96%B8%EC%96%B4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%96%B8%EC%96%B4
https://well-made-codestory.tistory.com/30
https://velog.io/@rmsry123/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%96%B8%EC%96%B4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%96%B8%EC%96%B4
https://gusrb3164.github.io/computer-science/2021/03/01/compile,-interpreter-language/

profile
성장을 즐기는 백엔드 자바 개발자

0개의 댓글

관련 채용 정보