Java: Java 1.8과 Java 8은 동의어일까? (feat. Java Platfrom)

LUNA Y0UNG
9 min readSep 3, 2020

--

오늘은 늘상 궁금했지만 적극적으로 알아보진 않았던 것에 대해 알아보려고 한다. Android에서 Java 8 버전을 쓰려면 build.gradle 파일에 다음과 같은 configuration을 추가해주어야 하는데, 그렇다면 Java 8 버전이라고 하는 게 맞을까? 버전 1.8이라고 하는 것이 맞을까?

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
jvmTarget = "1.8"
}

어느 것이 더 정확한 표현일까?

Java 8 vs. Java 1.8

현재 사용 중인 버전이기 때문에 8 혹은 1.8이라고 표기했지만, 6과 1.6, 7과 1.7을 대입해서 생각해도 된다.

결론부터 말하자면, Oracle 공식 문서에 나와있는 바로는 Java 8이라고 지칭하는 게 더 적절하겠지만 1.8이라고 해도 틀린 말은 아니다.

At this release, the platform name has changed from J2SE to Java SE. The official name is Java Platform, Standard Edition 6.

Both version numbers ( 1.6.0 and 6) are used to identify this release of the Java Platform. Version 6 is the product version, while 1.6.0 is the developer version. The number 6 is used to reflect the evolving level of maturity, stability, scalability and security of JavaSE.

위 내용에 따르면 공식적인 이름은 Java SE 6이고, 1.6.0은 개발자들을 위한 버전명이기 때문이다.

Version 1.6.0 Used by Developers

Java SE keeps the version number 1.6.0 (or 1.6) in some places that are visible only to developers, or where the version number is parsed by programs. As mentioned, 1.6.0 refers to exactly the same platform and products numbered 6.

https://www.oracle.com/java/technologies/javase/version-6.html

Java SE(Standard Edition)는 1.6.0 (혹은 1.6)이라는 버전명도 유지하고 있으며 이는 개발자들 사이에서 혹은 프로그램 상에서 버전명을 인식할 때 쓰인다고 한다. 즉 1.6.0은 정확하게 자바 플랫폼과 제품 버전 6을 가리킨다.

그런데 공식 문서에서 Java Platform명이 J2SE에서 Java SE으로 변경되었다는 말이 눈에 띈다.

the platform name has changed from J2SE to Java SE

Java Platform

Oracle 공식 문서에 따르면 Java는 언어인 동시에 플랫폼이다.

Java technology is both a programming language and a platform.

Java를 만든 James Gosling의 자바 백서(White paper)에서 발췌한 다음 내용을 보자.

Your applications are portable across multiple platforms. Write your applications once, and you never need to port them — they will run without modification on multiple operating systems and hardware architectures.

인터넷과 컴퓨터 기기의 발달에 따라 다양한 프로그램에 대응해야 할 일은 늘어나는데, 그럴 때마다 새로운 언어를 배우는 것 혹은 기존 프로그램을 새로운 OS에 이식하는 것은 개발자와 회사 입장에서 모두 부담스러운 일이다. 하지만 Java는 사용함으로써 이러한 걱정을 할 필요가 없다. Java 기반 프로그램은 컴퓨터 기계의 구조, OS, 유저 인터페이스와 상관없이 사용할 수 있기 때문이다.

Write Once, Run Anywhere

이를 자바의 ‘이식성’이라고 일컫는다.

JVM(Java Virtual Machine)

https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html

Java를 플랫폼에 상관없이 사용할 수 있는 이유는 JVM 덕분이다. JVM이란 자바 가상머신으로, 컴퓨터로 하여금 자바 기반의 프로그램을 실행시킬 수 있게 해주며 프로그램의 메모리도 관리해준다. 자바 이전까지 모든 컴퓨터 프로그램은 특정 OS를 위해 쓰였고 메모리는 개발자들이 관리해야 했다고 한다.

그럼 JVM은 어떻게 해서 Java 프로그램이 여러 OS에서 작동할 수 있도록 도와준다는 것일까?

자바 언어에서 개발자는 .java확장자를 가진 파일에 소스코드를 작성한다. 그러면 자바 컴파일러(javac)가 이를 .class파일 컴파일한다.

참고

컴파일러특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램을 말한다. 원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일(compile, 순화 용어: 옮김, 번역, 문화어: 콤파일)이라고 한다.

.class파일은 컴퓨터 프로세서가 바로 읽을 수 있는 코드가 아닌 bytecode로 되어있고, JVM은 자신이 구동되고 있는 OS를 인식한 후 이 bytecode를 해당 프로세서에 맞는 native machine code로 변환한다.

https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html
https://www.guru99.com/java-platform.html

자바는 위와 같은 과정을 통해 OS에 독립적으로 사용할 수 있기 때문에 플랫폼이라고 할 수 있는 것이다.

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

백 마디 말보다 한번 보는 게 나으므로 아래 영상을 시청하길 권한다.

Reference

--

--