사람이 이해할 수 있는 고급 언어로 작성된 소스 코드를 기계가 이해할 수 있는 기계어로 번역한 후에 프로그램을 실행하는 것이다.
컴파일러(Compiler)
컴파일러는 프로그램 전체를 스캔하여 한 번에 번역한다. 그렇기 때문에 대개 초기 번역 시간이 오래 걸린다.
하지만 한 번 번역하면 실행 파일이 생성되어 다음에 실행할 때 기존에 생성된 실행 파일을 실행하기 때문에 실행 속도가 빠르다.
컴파일러는 고급 언어로 작성된 소스를 번역하는 과정에서 오브젝트 코드(Object Code)라는 파일을 만들어 이를 하나의 실행 파일로 만드는 링킹(Linking) 작업을 해야 하므로 인터프리터보다 많은 메모리를 사용한다.
또한 컴파일러는 오류 메시지를 생성할 때 전체 코드를 컴파일한 후에 오류 메시지를 생성하므로 수정 사항이 발생하면 다시 컴파일해야 하는데, 컴파일이 오래 걸리는 큰 프로그램에서는 문제가 된다.
인터프리터(Interpreter)
인터프리터는 반대로 프로그램을 한 줄씩 번역하고 실행한다.
실행 파일을 따로 생성하지 않기 때문에 매번 프로그램을 실행할 때마다 한 줄씩 번역과 실행을 진행하므로 컴파일러에 비해 실행 속도가 느리다.
하지만 인터프리터는 컴파일러와 같은 과정을 거치지 않기 때문에 메모리 효율이 좋다.
또한 한 줄씩 번역하고 실행하기 때문에 오류 발견 즉시 오류 메시지를 생성해 실시간 코드 수정이 가능하다.
※ 컴파일러는 플랫폼(하드웨어)에 종속적이지만, 인터프리터는 플랫폼(하드웨어)에 독립적이라는 특징이 있다.
자바에서는 .java 파일을 javac(java compiler)가 바이트코드로 쓰여진 .class 파일로 변환한다.
(자바 바이트코드는 컴퓨터와 프로그램 사이의 별도의 버퍼 역할을 한다. 이는 보안적인 장점이 될 수 있으며 바이러스나 기타 악성 프로그램에 대응하는 가드 같은 보안 계층에 의해 보호될 수 있다는 의미이다.)
자바 가상 머신(JVM)의 구성 중 하나인 자바 인터프리터는 .class 파일 내의 바이트 코드를 특정 환경의 기계에서 실행될 수 있도록 변환한다.
'2022 하계방학 SW 집중교육' 카테고리의 다른 글
[Java] Constructor (0) | 2022.08.11 |
---|---|
[Java] Static (0) | 2022.08.09 |
[Java] Object-Oriented Programming (0) | 2022.08.09 |
[Java] Getter/Setter (0) | 2022.08.08 |
[Java] Access Modifier (0) | 2022.08.08 |