Search
📁

자바가 인터프리터 언어와 연관이 있다고?

최근에 자바가 자바가 인터프리터 언어와 연관이 있다는 글을 봤다.
찾아보니 컴파일 언어와 인터프리터 언어는 프로그램을 실행하는 방식에 대한 두 가지 주요 접근 방식!

컴파일 언어

소스 코드를 컴파일하여 기계어로 변환한 후 실행하는 방식.
컴파일러는 소스 코드를 전체적으로 분석하고 기계어로 번역한 뒤, 이를 실행 파일로 만듦.
C, C++, Java 등이 컴파일 언어의 대표.
(!! 잠깐 자바는 인터프리터 언어의 성질도 가지고 있다. 하단에 자바에 대한 설명을 참고바람)
장점
실행 속도가 빠름.
컴파일 후에는 소스 코드가 필요하지 않으므로 소스 코드의 보안이 보장.
단점
컴파일 과정이 추가되어 개발 및 디버깅 시간이 소요.
특정 플랫폼에 종속적인 실행 파일이 생성되므로 이식성이 떨어질 수 있음.

인터프리터 언어

소스 코드를 한 줄씩 읽어서 실행하는 방식.
인터프리터는 소스 코드를 실행하면서 실시간으로 해당 코드를 해석하고 실행.
Python, JavaScript, Ruby 등
장점
개발 및 디버깅이 용이.
특정 플랫폼에 종속되지 않음.
단점
실행 속도가 컴파일 언어에 비해 상대적으로 느림.
소스 코드가 그대로 실행되므로 보안에 취약할 수 있음.

차이점

컴파일 언어는 소스 코드를 기계어로 변환하여 실행 파일을 만들어 실행하는
반면, 인터프리터 언어는 소스 코드를 실시간으로 해석하고 실행.
속도: 컴파일 언어가 실행 속도가 빠르지만, 인터프리터 언어는 실행 속도가 상대적으로 느림.
개발 및 디버깅: 인터프리터 언어가 개발 및 디버깅이 용이하지만, 컴파일 언어는 컴파일 과정이 추가되어 시간이 소요.

결국 ! 자바는 인터프리터와 연관 되어있다!

자바는 일부 측면에서 인터프리터 언어와도 관련되어 있다.
이를 이해하기 위해 먼저 JIT(Just-In-Time) 컴파일러에 대해 알아야 한다.

JIT 컴파일러

프로그램의 바이트 코드를 실행 시간에 실제 기계어로 변환하는 컴파일러이다.
JVM(Java Virtual Machine)은 JIT 컴파일러를 사용하여 바이트 코드를 실행하기 전에 해당 코드를 분석하고, 반복되는 코드 블록을 식별하여 실제 기계 코드로 컴파일.
이러한 기계 코드는 CPU가 직접 실행할 수 있는 형태이며, 실행 시간에 발생하는 성능 향상을 제공함.

자바의 컴파일과 실행 과정

1.
컴파일
자바 소스 코드는 자바 컴파일러(javac)에 의해 바이트 코드로 변환.
이 바이트 코드는 플랫폼 독립적이며, 운영체제나 하드웨어에 의존하지 않음.
2.
실행
JVM은 변환된 바이트 코드를 읽어들이고, 이를 해당 플랫폼에서 실행 가능한 기계어로 변환하여 실행함. 이 과정에서 필요한 경우 JIT 컴파일러가 사용되어 성능을 향상시킴.
JIT 컴파일러는 프로그램이 실행되는 동안에 코드를 실시간으로 분석하고 컴파일함.
따라서 코드 실행 중에 필요한 부분이 발견되면 해당 부분을 JIT 컴파일하여 최적화한다.
JIT 컴파일러는 "핫스팟"이라고 하는 자주 실행되는 코드 영역을 감지.
이러한 핫스팟은 코드 실행 중에 반복적으로 호출되는 메서드 또는 루프와 같은 코드 블록을 뜻함.
JIT 컴파일러는 이러한 핫스팟을 식별하고 해당 부분을 컴파일하여 실행 성능을 최적화.
따라서 JIT 컴파일러는 코드 실행 중에 필요한 부분을 실시간으로 분석하고 최적화하여 실행 성능을 향상시키는 데 사용됨.

자바의 컴파일 언어와 인터프리터 언어의 관계

자바는 일반적으로 컴파일 언어로 간주됨. 왜냐하면 자바 소스 코드가 컴파일러에 의해 바이트 코드로 변환되기 때문이다.
그러나 JVM은 바이트 코드를 실행할 때 실제 기계어로 변환하는 JIT 컴파일러를 사용함. 이러한 점에서는 실행 시간에 코드가 인터프리터에 의해 해석되는 것과 유사한 동작을 함.
따라서 자바는 컴파일 언어이지만, JIT 컴파일러를 통해 일부 측면에서는 인터프리터 언어와도 유사한 성질을 갖고 있음.
이러한 자바의 특성은 개발자가 플랫폼 독립성과 실행 시간 성능 사이에서 균형을 유지할 수 있도록 도와줌.
컴파일 언어로서의 장점과 인터프리터 언어로서의 유연성을 결합하여 자바는 다양한 환경에서 효율적으로 사용될 수 있다.