Java

Java는 플랫폼 독립적이다?

Yeji Heo 2024. 1. 11. 00:41

 

Java는 플랫폼 독립적이다
?

 

 

1. 플랫폼이 뭘까?

한마디로 정의하기가 어렵다... 일단 지금은 "서비스를 위한 환경"이라고 생각한다.

배달 플랫폼이면 배달 시스템을 위한 환경, 기차역 플랫폼이면 기차를 타기 위한 환경 등...

뭔가가 올라 탈 수 있으면 그 자체로(상대적으로) 플랫폼이 될 수 있다고 생각하니 정리가 좀 되는 것 같다.

 

예를 들어, 상대적으로 보면 위의 셋은 각각 플랫폼이다.

 

1. 애플리케이션 플랫폼

아래한글이라는 애플리케이션을 사용한다고 해보자.

.hwp는 한글이라는 애플리케이션 플랫폼에서 동작한다.

 

2. 운영체제 플랫폼

애플리케이션은 특정 운영체제 플랫폼을 대상으로 개발된다. (Steam게임 mac용, windows용 따로 개발되듯이)

애플리케이션이 운영체제 플랫폼을 기반으로 동작하기 때문이다.

 

3. 하드웨어 플랫폼

OS는 하드웨어 리소스를 운용하는 서비스를 한다.

즉, 하드웨어 플랫폼을 활용하여 이들 리소스를 관리하는 것이다.


 

2-1. 플랫폼 독립적?

이 쯤에서 다시 Java를 들여다보자.

Java는 플랫폼 독립적이라고 했다. 이는 위에서 2번에 해당하는 운영체제 플랫폼 독립적임을 의미한다.

즉, OS로부터 독립적이라는 것은

Windows버전/Mac버전/Linux버전 등 OS마다 각각 애플리케이션을 개발하지는 않아도 된다는 뜻이다.

 

2-2. 플랫폼 종속적?

애플리케이션이 직접적으로 OS에 접근해야 한다면, OS플랫폼에 대해 종속적이라고 볼 수 있다.

그 예시는 아래와 같다.

 

먼저, 사람이 프로그래밍 언어로 작성한 코드는

컴퓨터가 읽을 수 있도록 기계어로 변환해줘야 한다.

그 역할을 하는 게 컴파일러다.

 

- Unmanaged Language

C나 C++처럼 프로그래밍언어를 기계어로 단번에 컴파일해버리는 Unmanaged Language

OS에서 바로 동작 가능한 형태의 코드를 줘버리는 것이므로, OS플랫폼 종속적이게 되어버린다.

- Managed Language

한편, Java는 프로그래밍언어 -> 바이트코드(IL) -> 기계어 순서로

중간 언어인 바이트코드로 먼저 컴파일 된다.

이는 OS가 읽을 수 있는 형태가 아니다.

 

이처럼 바이트코드(ByteCode)는

OS가 바로 읽을 수 있는 형태가 아니다.

바로 JVM을 위한 것이다!!


 

3. Java Virtual Machine(JVM)?

그렇다면 JVM이 뭔데??

바이트코드는 JVM이라는 플랫폼을 통해 각 OS들에 맞는 기계어 변환된다.

즉, Java가 플랫폼 독립적일 수 있는 건 JVM 덕분이다.

 

Java Programming Language로 코드를 작성하면 생성하면 .java 형식 파일이 만들어진다.

자바의 컴파일러(javac)는 

OS가 바로 실행가능한 Native Code로 컴파일 하지 않고,

.class라는 ByteCode로 우선 컴파일한다.

이 ByteCode를 JVM에서 각 운영체제에 맞는 기계어로 변환해주는 것이다.

 

+ 단점은?

플랫폼 독립성을 제공하기 위해 중간에 JVM을 거치다보니

속도는 C나 C++보다 느릴 수 밖에.


 

+ 오늘의 여담

 

사실 JDK에는 JVM은 물론

javac(컴파일), jdb(디버깅), java(자바실행파일)등이 다 포함되어있다.

이걸 편하게 쓸 수 있는 게 Eclipse, intelliJ 등..인건데,

정작 내부는 잘 모르고 맨날 Eclipse로 코드만 끄적인 지난 날을 반성한다....