티스토리 뷰
컴퓨터는 0, 1 과 같은 이진수(기계어)만 이해하는 기계라는건 모두가 알고 있다.
그런데 우리는 eclipse, vs code, IntelliJ 등을 이용해서 java, js, python 등의 코드를 작성하고 이것으로 컴퓨터를 동작시킨다.
이 고급언어를 컴퓨터가 이해할 수 있는 기계어로 번역해주는게 바로 컴파일러와 인터프리터다.
컴파일러와 인터프리터는 언어를 다른 언어로 번역해주는 프로그램이라는 점이 동일하다. 그럼 차이점은 무엇일까?
1. 컴파일러 (Compiler)
코드의 전체를 한번에 기계어로 번역한다.
모든 코드를 한번에 번역하기 때문에 처음에는 시간이 오래걸리지만 한번 번역해 놓으면 바이너리 파일이 생성되어 메모리에 저장되기 때문에 사용하는 메모리는 많지만, 실행시에 번역하는 시간이 적어 수행 속도가 빠릅니다.
단점 : 운영체제에 종속적 → 윈도우에서 컴파일한 파일은 리눅스에서 이용할 수 없다.
ex) C, C++
2. 인터프리터 (Interpreter)
코드를 한줄한줄 번역한다.
코드를 줄마다 번역하고 실행하기 때문에 실행 중에 에러가 나면 바로바로 발견할 수 있다.
단점 : 코드를 바로바로 번역하기 때문에 실행 속도가 느리고, 원본 소스코드가 그대로 노출된다.
ex) js, python 과 같은 스크립트 언어
3. 그렇다면 JAVA는?
JAVA는 Compiler와 Interpreter를 동시에 이용하는 하이브리드 방식.
먼저 .java 파일을 Java 컴파일러에서 컴파일(빌드)하여 .class 라는 바이트 코드로 컴파일한다.
이 바이트 코드는 JVM의 Class Loader에 의해 JVM의 메모리에 로드된다.
로드된 바이트코드는 JVM의 실행엔진(JIT Compiler, Interpreter)에 의해서 기계어로 번역된다.

JVM 구조에 대해서는 다음 게시글에 포스팅 하자.
'JAVA, Kotlin' 카테고리의 다른 글
| @Resource, @Autowired, @Inject 차이 (0) | 2021.11.01 |
|---|---|
| 람다 Lambda 란? (0) | 2021.06.23 |
| == 와 equals 차이? (0) | 2021.03.03 |
| JPA 네이티브 쿼리 - param이 많을 때, 복합키일때 (0) | 2020.11.16 |
| Mock / Mockito 란? (2) | 2020.01.15 |