[Java] Java는 compile 언어? interpreter 언어?
by 무작정 개발반응형
이번에는 Java의 동작 과정 및 compile 언어, interpreter 언어에 대해 정리할 것이다.
Java를 보다 깊게 이해하기 위해 다시 한번 복습하면서 글을 작성 중입니다.
기초적인 내용은 다루지 않을 예정입니다.
Compile ? Interpreter ?
먼저 컴파일(Compile)언어 , 인터프리터(Interpreter)언어 의 차이점에 대해 먼저 알아보자.
컴파일(Compile) 언어
- 기계가 이해할 수 있는 언어로 변환하는 컴파일 과정을 통해 한꺼번에 번역해서 수행하는 언어를 뜻한다.
- 대표적인 언어 : C, C++, Java 등이 있다.
- 특징
- 컴파일만 해놓으면 기계어 파일이 만들어지는데 실행만 하면 컴퓨터가 기계어 파일을 바로 바로 읽어서 실행 속도가 빠르다.
- 코드의 크기에 따라 컴파일 시간이 오래 걸릴 수 있다.
- 각 운영체제마다 컴퓨터가 인식하는 방식이 다르고, 비트(bit) 또한 다르기에 제약이 존재한다.
인터프리터(Interpreter) 언어
- 한 줄씩 컴퓨터에게 번역하며 실행시키는 방식을 가진 언어 (사람이 작성한 코드를 기계가 이해할 수 있도록 문장 단위로 해석해주는데 이러한 역할을 하는 것이 인터프리터(Interpreter) 이다.
- 대표적인 언어 : JS, Python, PHP 등이 있다.
- 특징
- 한 줄씩 번역하며 실행되기 때문에 시간이 오래 걸린다.
- 오류 상관없이 컴퓨터에게 실행시키는 명령을 하기에 오류가 존재할 수 있다. ( 컴파일 언어는 컴파일 하는 과정에서 오류가 있는 지 확인할 수 있다.)
Java 는 어떤 언어인가?
Java 는 Compile 언어라고 하지만 정확히는 Compile & Interpreter 가 혼합된 "Hybrid" 언어이다.
[Java 동작 과정]
"Hello.java" 라는 파일을 컴파일(Compile) 시키면 "Hello.class" 파일로 변역된다.
"Hello.class" 파일을 가지고 JVM에서 인터프리터(Interpreter) 방식을 통해 운영체제(OS)에 전달한다.
이렇게 2 가지 방식을 사용해서 Hybrid 언어라고 한다.
[ Interpreter 언어 = 동적 설계, Compile 언어 = 정적 설계 ] 이 2가지가 큰 차이점이다.
위의 그림을 예시로 설명하자면
Compile 는 정적이라 하였으니 움직이지 않고 메모리 사이즈를 확보해 놓아서 그 사이즈에 맞게만 설정하면 된다.
하지만 Interpreter는 Compile과 다르게 메모리 설정을 해두지 않아서 다양한 크기가 들어올 수 있다.
위는 창고를 예시로 설명하기 위해 그려놓았는데 창고 사이즈가 정해지지 않았지만 적당한 크기들의 물건들이 들어오다가 A 라는 엄청 큰 상자가 들어왔다. 이는 컴퓨터 용어로 포인터(Pointer)로 A 상자를 다른 곳 Heap에 옮겨( 다른 저장 창고/동적 할당을 할 곳)에
저장해 놓고 사용할 수 있다.
Reference
반응형
'Language > Java' 카테고리의 다른 글
[Java] Call by Value, Call by Reference (1) | 2022.10.11 |
---|---|
[Java] Stack, Heap (2) | 2022.10.11 |
[Java] JVM와 바이트 코드 (0) | 2022.10.04 |
[Java] JDK, JRE 이란? (0) | 2022.10.03 |
자바의 정석 | Ch 07 - 객체지향 프로그래밍2-2 (0) | 2022.02.06 |
블로그의 정보
무작정 개발
무작정 개발