반응형

컴퓨터 프로그램 만드는 일을 프로그래밍이라 하고,

프로그램 만드는 사람을 프로그래머라고 합니다.

 

프로그래밍이란 컴퓨터가 일을 하도록 명령을 하고 그 명령을 실행하게끔 하는 과정입니다.

이 때 우리는 컴퓨터에게 1부터 100까지 더하라고 명령하고 싶습니다.

그렇다고 우리말로 '1부터 100까지 더하라.' 고 쓸 수는 없습니다.

그래서 프로그래밍 언어를 사용하는 것입니다.

 

그리고 이렇게 만든 프로그램이 프로그래밍 언어 문법에 잘 맞는지 확인하고,

컴퓨터가 이해할 수 있는 언어로 번역해야 합니다.

이 작업이 컴파일(Compile)이며 이를 수행하는 프로그램이 컴파일러(Compiler)입니다.

 

쉽게 말하면 컴파일은 프로그래밍 언어를 기계어로 번역해주는 과정입니다.

 

추가로 빌드는 컴파일러가 소스 코드를 컴파일하여 실행 파일을 만드는 과정을 말합니다.

자바는 빌드 과정을 통해 .class 파일이 만들어집니다.

그러므로, 컴파일이 빌드의 과정 중에 하나인 것이지요.

 

자바(Java)는 프로그래밍 언어 중 하나로, 자바 개발 환경을 설치하면 컴파일러도 함께 설치됩니다.

 

 


 

자바는 다른 프로그래밍 언어와는 구분되는 강점을 가지고 있습니다.

플랫폼에 영향을 받지 않고 다양한 운영체제에서 사용할 수 있다는 점입니다.

 

예를 들어 윈도우 운영체제에서 C언어로 개발한 Test라는 프로그램이 있습니다.

이 프로그램을 컴파일하면 Test.exe가 만들어집니다.

Test.exe는 윈도우에서 실행되는 '실행파일'이라고 합니다.

이 실행파일은 윈도우에서는 작동되지만 리눅스 운영체제에서는 사용할 수 없습니다.

만약 이 파일을 리눅스 운영체제에서 실행하려면, 리눅스 환경에서 다시 컴파일해서 리눅스 운영체제에

맞는 실행파일을 새로 만들어야 합니다.

 

하지만 자바에서는 Example이라는 이름의 프로그램을 만들고 컴파일하면 Example.class 파일이 생성됩니다.

이 파일을 바이트 코드라고 하는데 완벽한 실행파일이 아닙니다.

다시 말하면 운영체제에 맞는 완벽한 기계어가 아닌 중간 기계어입니다.

이 바이트 코드를 실행하려면 운영체제에 맞는 자바 가상 머신(JVM: Java Virtual Machine)이 필요합니다.

운영체제에서 직접 실행하는 게 아니라 가상 머신에서 먼저 실행하고,

이 가상 머신이 운영체제에 맞는 완벽한 실행파일로 바꿔줍니다.

즉 .class 파일을 만들어 두면 운영체제에 맞는 가상 머신을 이용하여 어느 환경에서나 실행할 수 있습니다.

 

자바 가상 머신(JVM)은 자바 실행 환경(JRE) 설치 시 함께 설치됩니다.

 

 

프로그래밍 언어는 사람이 이해하기 쉬울수록 고급언어,
컴퓨터가 이해하기 쉬울수록 저급언어입니다.

고급언어에는 C언어, Java 등이 있습니다.
저급언어에는 기계어, 어셈블리어 등이 있습니다.

이러한 특성 때문에 초기 자바는 프로그램 실행 속도가 느리다는 평이 많았지만,

하드웨어가 발전하면서 자바 컴파일러의 방식이 JIT(Just In Time)방식으로 개선되어서

실행 속도에도 문제는 없습니다.

 

컴파일의 세 분류
- 원시 코드를 바로 기계어로 변환하는 정적 컴파일(Static Compilation)
- 바이트코드 등의 중간 코드를 기계어로 변환하는 AOT 컴파일(Ahead Of Time Compilation)
- 실행시 최초 한 번에 한해 컴파일을 거치는 JIT 컴파일(Just In Time Compilation)
->JIT 컴파일러는 실행 시점에 기계어 코드를 생성하는데, 
같은 코드가 반복되면 매번 기계어 코드를 새로 생성하지 않고 이전에 만든 기계어를 재사용합니다.
또한 JIT 컴파일러는 운영체제에 맞게 바이트 실행 코드로 한 번에 변환하여 실행하기 때문에
이전의 자바 해석기방식보다 성능이 10~20배 좋습니다.

 


 

이 게시물의 내용을 그림 하나로 요약해봤습니다.

이상입니다.

좋은 하루 보내세요.

반응형

'JAVA > 기본 개념' 카테고리의 다른 글

#8 Object 클래스  (0) 2022.08.23
#4 예외처리(Exception Handling)  (0) 2022.08.22
#3 인터페이스  (0) 2022.08.22
#1 자바 개발 핵심 원칙  (0) 2022.07.11
[JAVA] 구조 개념 및 명명 규칙  (0) 2020.11.03

+ Recent posts