Back-end/CS knowledge

컴파일러compiler와 인터프리터interpreter의 차이? + 자바컴파일러와 자바인터프리터의 역할

cheersHena 2022. 7. 25. 02:19
반응형

 

컴파일 Compile

코딩을 할때 사용하는 프로그래밍 언어들은 사람이 알아볼 수 있는 인간친화적 언어이다.

컴퓨터는 0과 1로 이루어진 기계어 신호만 알아듣기 때문에 이해할 수 없다.

때문에 우리가 작성한 코드를 컴퓨터에서 실행시키려면 컴퓨터가 알아들을 수 있도록 코드를 기계어로 번역해야한다.

코딩을 마친 후 코드로 짜여진 소스들을 소프트웨어로 실행시키기 전 한방에 미리 번역하는 과정이 '컴파일'이고, 번역역할을 해주는 놈이 컴파일러 이다. 

이 컴파일 작업이 요구되는 언어들을 컴파일러 언어라고 한다.

대표적으로 C, C++, 등의 언어가 있다. (Java 는 조금 특이하게 인터프리터도 병행한다. 아래서 살펴보겠다. )

 

컴퓨터는 이렇게 컴퓨터의 언어로 번역된 코드를 읽기만 하면 되기 때문에 컴파일러언어는 한번만 번역해놓으면 실행 속도가 빠르다.

대신 간단한 수정을 할 때도 전체를 컴파일을 해주어야 한다는 번거로움이 동반된다.

 

인터프리트 Interprete

컴퍼일러 언어와 달리 코딩 후 번역작업을 한방에 미리 진행하지 않고, 실행 할 때마다 '인터프리터'라는 프로그램이 컴퓨터에게 코드를 기계어로 번역해준다. 이러한 언어들을 인터프리터 언어라고 한다 

대표적으로 Java script, Python, Ruby 등이 있다.

컴파일 과정이 필요없기 때문에 큰 기억장치가 필요없이도 번역과정이 비교적 간단하다. 

하지만 실행할때마다 번역을 해주어야 하기 때문에 실행속도는 컴파일러 언어에 비해 느리다. 

 

이러한 특성에 따라 개발자는 적합한 언어를 필요에 따라 선택하여 제품을 개발한다. 

 

 

 

* JAVA의 컴파일러와 인터프리터.

자바는 컴파일러 언어이기도하고 인터프리터 언어이기도 하다. 

자바는 다른 컴파일 언어들이 작동하듯이 자바 컴파일러를 이용해 전체 코드를 한방에 번역한다. 이 과정은 컴파일러 언어와 같지만 자바 컴파일러는 코드를 바로 기계어로 번역해주는 것이 아니라, 자바 가상 머신(JVM)이 실행 시킬 수 있는 자바 바이트코드(class파일)로 번역한다. 보통 자바를 컴파일하고나면 .java 파일들이 .class로 변환된 것을 확인할 수 있는데 클래스 파일은 바이트코드로 이루어져 있다.   

자바 컴파일러가 하는 일. 

hellojava.java 를 작성하면, javac (java compiler) 자바 컴파일러를 통해 hellojava.class 로 변환.

.java --> javac(java compiler) --> .class

 

자바 인터프리터가 하는 일.

자바 인터프리터는 자바 컴파일러에 의해 변환된 .class파일 내의 바이트코드를 특정 환경의 기계에서 실행될 수 있도록 바이트 코드를 한 줄씩 읽으면서 기계어(2진 코드)로 변환해준다. 

.class --> JVM(java interpreter) --> 100100001001 (기계어) --> 실행

즉, 정확히 말하자면 자바는 컴파일과 인터프리터를 병행하므로 하이브리드 언어로 분류되는 것이 정확하다. 

반응형

'Back-end > CS knowledge' 카테고리의 다른 글

객체지향 프로그래밍 OOP  (0) 2022.08.02
싱글톤 패턴이란? singleton pattern  (3) 2022.07.27
자바가상머신 JVM 이란?  (0) 2022.07.25