1) 자바 개요 - 등장 배경

dev-mage·2022년 8월 26일
0

Hello Java World!

목록 보기
1/32
post-thumbnail

💡 이 시리즈는 Java 8을 기준으로 작성되었습니다.

자바의 등장 배경과 자바 프로그램 실행 과정

자바의 등장 배경 - 자바 이전에 C...

자바 이전에 C라는 언어가 있었다. C언어는 UNIX라는 운영체제를 좀 더 쉽게 개발하기 위해 만들어졌다. 엥? 갑자기 웬 운영체제?라고 한다면, 이 C언어 이전엔 어셈블리어 라는 언어로 UNIX 운영체제가 개발되었다. 어셈블리어는 하드웨어에 종속적인 언어라 운영체제를 컴퓨터에 이식하기 위해선 각 컴퓨터마다 서로 다른 어셈블리어로 작성해야 했다. 이런 불편함을 해결하고자 B언어를 거쳐 1972년 C언어를 개발한다.

https://www.oracle.com/a/ocom/img/rc30v1-java-se.png
https://www.oracle.com/a/ocom/img/rc30v1-java-se.png

하드웨어로부터 독립적인 언어를 만들고자 C언어가 탄생했다면 자바는 여러 플랫폼 에서 독립적으로 실행될 수 있는 프로그램을 위해 만들어졌다. 초기 자바는 다양한 가전제품에서 동작하는 프로그램을 위해 개발되었고 WORA(Write Once Run Anywhere)라는 슬로건을 내세우며 공개되었다. 한 번 작성하고 어느 곳에서나 실행한다는 대체 무슨 말일까? 이를 이해하려면 먼저 “컴파일”이란 단계를 알아야한다.

컴파일(Compile)과 JVM

프로그래밍 언어는 저급 언어(low-level)와 고급 언어(high-level)로 나눌 수 있다. 저급 언어란 컴퓨터가 이해하기 쉽게 작성된 언어(기계어, 어셈블리어)로 사람이 이해하기 쉬운 언어는 고급 언어로 분류된다. 우리가 흔히 사용하는 자바나 C# 같은 언어는 고급 언어로서 컴퓨터가 바로 이해할 수 없기에 따로 “번역"하는 과정이 필요하다. 이 과정을 컴파일이라고 한다. 본래 컴파일이란 어떠한 언어로 작성된 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스이지만 대부분의 경우 고급 언어를 저급 언어로 변환하는 과정을 일컫는다.

C나 C++로 작성된 프로그램은 실행하기 위해 각각의 하드웨어에 맞는 기계어로 컴파일된다. 따라서 다른 하드웨어에서 실행하려면 새로 컴파일해주어야한다. 자바는 처음 시작부터 다양한 기기에서 동작하는 프로그램을 목표로 개발되었기 때문에 각 하드웨어마다 재컴파일해야하는 문제를 JVM(Java Virtual Machine: 자바 가상 머신)으로 해결하였다.

자바로 작성된 프로그램은 곧장 기계어로 컴파일되지 않는다. 대신 JVM이 이해할 수 있는 언어인 자바 바이트코드(Java Bytecode)로 컴파일되고 JVM은 이 자바 바이트코드를 각 하드웨어와 운영체제에 맞춰 실행한다. 이를 두고 자바 응용 프로그램을 플랫폼 독립적이라 한다. 마이크로소프트 PowerPoint로 예를 들어보자면, PowerPoint 프로그램(=자바 실행 환경)은 macOS, Windows, iOS, Android 등 플랫폼별로 다른 버전을 설치해주어야 한다. 하지만 .ppt 확장자를 가진 PowerPoint 파일(=자바 응용 프로그램)은 어디든 PowerPoint가 설치되어 있다면 열 수 있다. macOS용, Windows용 따로 ppt 파일을 만들 필요가 없는 것처럼 플랫폼에 맞는 자바 실행 환경(JRE: Java Runtime Environment)만 갖춰진다면 한번 컴파일된 자바 프로그램(Write Once)은 JVM을 통해 어떤 환경에서든 실행(Run Anywhere)할 수 있다.

자바 프로그램 실행 과정

자바 프로그램 실행 과정을 간단하게 요약하면 다음과 같이 표현할 수 있다.


https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html

  1. 확장자가 .java 인 파일을 작성한다. 사람이 읽을 수 있는 프로그래밍 언어로 작성된 문서를 소스 코드라고 한다.
  2. 자바 개발 도구(JDK: Java Development Kit)에 포함된 javac 컴파일러로 소스 코드를 컴파일하여 .class 파일로 변환한다. .class 파일은 하드웨어나 운영체제에 관계없이 JVM에서 실행될 수 있는 바이트코드로만 이루어져있다.
  3. 마찬가지로 JDK에 포함된 java 프로그램을 사용하면 컴파일된 .class 파일을 JVM에서 타겟 플랫폼에 맞게 실행한다.

※ 실제 실행 과정은 https://velog.io/@dev-mage/simply-run-java-on-an-m1-mac 에서 확인


각주


References

0개의 댓글