1. 컴파일러 언어
동작 원리
프로그래밍 언어로 이루어진 소스 코드 파일을 컴파일러로 하드웨어가 이해할 수 있는 이진코드(목적) 파일로
컴파일한다.
여러 목적 파일과 라이브러리를 하나로 합치는 링킹 과정을 거쳐 실행 가능한 프로그램을 만든 후 프로그램
단위로 한꺼번에 실행시킨다.
컴파일의 장점
이에 따라 컴파일링 과정에서 소스 코드 내의 불필요한 요소들을 제거하고 명령어의 효율적인 배치를 수행하여
다양한 최적화를 통해 실행 속도와 성능을 향상시킬 수 있다.
컴파일의 단점
그러나 소스코드 파일을 실행시키기 위한 실행 파일을 만드는 과정이 복잡하여 소스코드 변경 시 불필요한
부분까지 반복해서 변환 및 링킹 과정을 거쳐야 해 번거롭고 시간이 오래 걸린다.
2. 인터프리터 언어
동작 원리
해당 인터프리터가 지원하는 프로그래밍 언어 또는 명령어로 작성된 스크립트 등을 라인 단위로 실행 시간에
변환하여 운영체제를 통해 실행될 수 있는 이진 코드로 전달해준다.
이때 라인 내부에 여러 statement가 있을 수 있다.
인터프리터의 장점
이에 따라 명령어를 입력한 후 바로 실행이 가능해, 개발 단계에서 소량의 수정에 대한 결과를 빠르게 확인할 수
있다. 또한 인터프리터만 존재한다면 운영체제에 직접적인 영향을 받지 않으며, 동적 타이핑, 동적 바인딩,
런타임 코드 실행 등의 기능을 통해 프로그램의 구조를 유연하게 변경하거나 고급 기능을 손쉽게 활용할 수 있다.
인터프리터의 단점
그러나 실행과 변환이 동시에 이루어지기 때문에 컴파일 방식보다 비교적 실행 속도가 느리고 프로그램 단위의
디버깅과 최적화가 이루어지기 어려워 프로그램이 무거워지고 속도가 느려진다.
3. 자바 가상머신
동작 원리
자바는 기본적으로 컴파일러 언어이지만, 소스 코드를 바이트코드로 컴파일하여 플랫폼에 독립적인 중간
형태로 변환한 후, 자바 가상머신(JVM)이 이 바이트코드를 해당 플랫폼에 맞게 인터프리팅하여 실행한다.
자바 가상머신의 장점
소스 코드를 바이트코드로 컴파일하여 플랫폼에 독립적인 중간 형태로 변환한 후 자바 가상머신이 인터프리팅
함으로서, 컴파일 방식의 플랫폼 종속 문제를 효과적으로 해결하였다.
바이트코드는 컴파일이 완료된 후에도, 프로그램 실행 중에 소스 코드가 수정되면 수정된 클래스 단위로 다시
변환하여 HotSwap 기능을 통해 즉시 디버깅할 수 있다. 또한 JIT(Just-In-Time) 컴파일러는 실행 중 자주 호출되는 “핫스팟(hotspot)” 코드를 네이티브 머신 코드로 동적으로 변환한다. 이를 통해 중복 변환을 피하고 최적화된
코드를 생성하여 반복 실행되는 부분의 성능을 크게 향상시키며, 시간이 지날수록 같은 코드의 실행 속도가
빨라지는 효과를 얻을 수 있다. 또한, JIT는 변환된 네이티브 코드를 메모리에 캐시하여 동일 코드의 재컴파일을 방지하고, 각 하드웨어 환경에 맞춘 최적화를 수행해 최상의 성능을 발휘할 수 있게 해준다.
자바 가상머신의 단점
하지만 이러한 캐싱 과정에서는 추가적인 메모리를 사용할 수 있으며, 초기 실행 시에는 바이트코드를
인터프리터 방식으로 실행하고 JIT 컴파일러가 네이티브 코드를 생성하는 과정에서 약간의 지연이 발생할 수
있다.
4. 컴파일 언어와 인터프리터 언어의 차이
| 컴파일 언어 | 인터프리터 언어 |
| 오브젝트 코드 생성(2진 코드) | X |
| 프로그램 단위로 변환이 이루어짐 | 라인 단위로 변환이 이루어짐 |
| 변환에 많은 시간이 소요 | 변환 속도가 빠름 |
| 실행 파일로 변환된 후에는 컴파일러 필요없음 | 실행 시 컴파일러가 필수적임 |
| 실행 파일이 운영체제에 종속적임 | 운영체제에 종속적이지 않음 |
첫댓글 4번 요약표에 아주 잘 정리했네요 문장의 의미를 하나하나 이해할수 있도록 해보세요