안드로이드 프로젝트 설정을 하다 보면 gradle에서 jvmTarget, javaversion 설정을 해줘야한다.
그럴 때마다 1.8과 8버전에 대해 접하는데, 정작 이에 대해 궁금해서 자세히 알아본 적이 없는 것 같아 조사해봤다.
Java 버전 네이밍 방식
Java se는 1.0부터 1.8까지 1.x 방식의 버전 표기법을 사용했다고 한다.
지금으로 치면 1, 2, 3, 4, 5이나 그때는 1.1, 1.2, 1.3, 1.4, 1.5로 표기했다는 얘기이다.
그러다 Java se 9 버전에 이르러서는 1.x 방식의 네이밍 기법을 버리고 한자릿수 버전 표기법으로 선회하게 된다.
개인적인 생각으로는 1.9 다음 10버전은 2.0/10.0 이런식으로 표기해야하는데, 이런 혼란스러운 네이밍을 피하기 위함이 아닐까.. 싶다(?)
그래서 우리가 매일 java 관련 설정을 할 때 1.9, 2.0 버전은 찾아볼 수 없는 것이다.
한 마디로, Java 1.8 = Java 8 이라는 말이다. 버전 8 이하에서는 1.x 네이밍 방식으로 불러도 맞는 표현이다.
그럼 기존 버전들도 1, 2, 3 처럼 한자릿수로 바꾸지 왜 냅둔거야?
Java1 출시일이 1996년 1월, Java8 출시일이 2014년 3월이다.
기존 다른 여러 프로그램들은 96년 Java1부터 Java8까지 모든 버전을 1.x로 네이밍해서 사용해왔고, Java에 대한 여러 서적이나 정보들도 그렇게 적혀있고 가르쳐 왔을 것이다.
레거시 버전들에 대한 리네이밍이 불가능한 이유가 바로 이곳에 있다.
시스템에서 기존에 잘 사용해오고 있고, 책에 적혀있는 신뢰성 있는 정보인 버전 정보를 변경하는 것은 굉장히 리스크가 큰 행위이다.
사람들의 정보 습득 과정에도 혼란을 야기할 것이고, 이로 인해 다른 프로그램들에서 사이드 이펙트가 발생하여 해당 기업이나 개인이 손해를 본다면 큰 파장을 불러일으킬 수 있기 떄문이다.
사람들이 Java 8을 제일 많이 사용하는 이유가 뭐야?
이것에 대해 이해하기 위해서는 오라클이 일정 주기(3-4년)마다 릴리즈하는 Java의 LTS 버전에 대해 알아야 한다.
> LTS 버전이란?
최소 8년 이상의 기간 동안 버그 수정과 보안 업데이트를 보장하는 버전 (Long term support)
최초의 LTS 버전은 Java 8 이였으며, 14년 3월부터 8년이상의 기간동안 지속적인 수정을 거듭하고 있다.
첨단산업이 발전하며 개발자에 대한 수요가 기하급수적으로 늘어난 것은 비교적 최근이라
Java8이 메인 LTS 버전인 2014년도~2022년도에 Java를 배운 사람들은 대부분 Java 8/11 버전을 사용했을 것이다.
그리고 기업들 또한 LTS 버전을 매우 선호한다. 다른 일반 버전들에 비해 더 well-made되는 버전이기 때문이다.
또한 Jvm 기반 언어들과 현재 가장 호환성이 좋은 버전이 Java 8인 것도 영향을 미쳤다.(안드로이드에서는 코틀린이 대세가 된지 오래)
나는 이 사실을 알고 나서야 우리가 Java 8/11 버전을 많이 사용하는지 제대로 이해할 수 있었다.
LTS 버전의 계보
Java 8 -> Java 11 -> Java 17 -> Java 21
2014년 3월에 Java 8,
2018년 9월에 Java 11,
2021년 9월에 Java 17,
2023년 9월에 Java 21 버전이 출시될 예정이다.
Java 8은 LTS 유지보수 8년 기간이 지났는데, 이제 레거시 버전이 되는건가?
Java 8은 작년 기준 전체 Java 사용자의 46%가 사용하는 메이저 버전이다.
그런데 LTS 보장기간이 끝났다고 지원을 중단한다면, 큰 문제가 될 수 있을 것이다.
그에 따라 오라클은 Java 8 버전에 대한 무기한 업데이트 및 지원을 할 예정이라고 한다.
그러다 자연스럽게 Java 11, 17 로 사용자들이 많이 넘어가게 된다면 천천히 8 버전에 대한 지원을 축소해나가지 않을까?
번외 (1) Java, Jdk, Jre의 차이점은?
- Java: 프로그래밍 언어(gpl)
- Jdk: 개발자가 java 프로그램을 개발하기 위한 Java Development Kit
- Jre: 사용자가 java 프로그램을 실행하기 위한 Java Runtime Environment
프로그램 개발을 하기 위해서는 Jdk가 필요하며,Jdk에는 Jre가 포함되어 있다.
개발을 제외하고 프로그램의 실행만이 목적이라면 Jre만 있어도 가능하다. Jre는 jvm/java 클래스 라이브러리를 포함하여 Java 프로그램을 실행하기 위한 환경을 설정할 수 있게 해준다.
번외 (2) Java se, Java ee, Java me의 차이점은?
- Java se: 표준 Java. 일반적인 개인 사용자들이 사용하는 버전
- Java ee: 기업에서 사용하는 Java
- Java me: 임베디드/모바일 디바이스에서 사용하는 경량화된 Java
평소에 너무나 당연한 듯이 사용하는 것들에 의문을 가지는 것은 쉽지 않다.
그 기간이 길면 길수록 그것에 대한 호기심은 줄어들며 굳이 알아야 할 이유를 찾지 못하기 때문이다.
오늘 공부한 Java 버전의 역사에 대해서도 1.8과 8이 같은 버전인줄은 알았지만 왜 그런지, lts란 무엇인지 등과 같은 것도 몰랐다.
이런 사소한 것들에도 관심을 기울여 탐구하는 정신을 가지도록 해야겠다.
참고 링크: Java 버전의 역사
틀린 정보가 있다면 피드백에 열려 있으며, 아래 공감 버튼을 눌러주시면 포스팅하는데에 큰 힘이 됩니다! 🙏
'CS' 카테고리의 다른 글
[CS] mutableMapOf / linkedMapOf / hashMapOf 차이 (0) | 2023.07.23 |
---|---|
GPL과 DSL의 차이 (0) | 2023.06.28 |
[CS] 동시성과 병렬성의 차이 (0) | 2023.04.17 |
Json이 독립적인 데이터 포맷인 이유 (0) | 2023.01.02 |