자바를 사용하는 회사 프로젝트들의 코드를 보면 대체로 버전들이 아래 처럼 나뉘어진다
- Java 8
- Java 11
- Java 17
본인 회사에서는 Java 8, 그리고 Java 17을 주로 다루었는데 처음에는 왜 다들 Java 8을 고집하고 그 사이의 버전을 사용하지 않고 17로 건너 뛰는지 궁금했다.
알고보니 내가 다녔던 회사들의 경우, Java 8 버전을 고수 하는 이유는 매우 간단했다. 레거시 코드(Legacy Codes) 들이 이미 Java 8으로 구성되어 있고, 코드의 규모와 의존성이가 커진 나머지 쉽게 바꾸지 못하게 된 것이다. 만약 바꾼다면 자바 버전에 따른 치명적인 버그들이 발견 되다든지, 아예 새로운 버전의 기능으로 업그레이드 할 때 바꾸게 될텐데 그런 일이 드문 이유중 하나는 바로 업그레이드에 들어가는 시간과 비용이 비 효율적이기 때문이다. 업그레이드에 들어가는 기업의 기회비용이 다른 프로젝트에 집중하는 것보다 비싸기 때문이다.
그래도 궁금한 것은 궁금한 것이다. 왜 Java 8은 많은 레거시에 쓰였으며 그 이하의 버전들에는 무슨 일이 일어난 것일까?
Java 8으로 버전이 업그레이드 되면서 너무나 유용하고 많은 기능들이 업데이트 되었기 때문에 레거시 코드는 대부분 Java8을 사용한다. 심지어 다른 회사의 코드들도 말이다.
Java 8에 Stream, Lambda, default/static method, Concurrency(CompletableFuture), Annotation, Optional, DateTime, 그리고 많은 추가 구문들과 추가 Annotation들이 한꺼번에 업데이트 되었기 때문에 굳이 하위버전을 쓸 일이 없어지게 된다.
그러면 11이상에서는 Java 8과 어떤 차이점이 있을까?
하나하나 따져보자면 너무나도 설명이 길어지고 끝도 없을것 같아 간단히 정리해 보겠다.
- 기존 기능들, Concurrency 기능의 최적화
- 새로운 기능과 라이브러리들
- 레코드 클라스/모듈
- Switch (Lambda 형식의 switch - Break를 안써도 된다!)
- var 타입 (솔직히 이건 잘 모르겠다. 타입이 가려져서 코드 읽기가 불편해졌다)
- GC와 JVM 프로세스 최적화
이 외에 많은것들이 있지만 본인이 생각나는 것 위주로 적어보았다.
그리고 Java 8, Java 11, Java 17이 장수 하는 이유가 아래 링크에 나와있다.
개인적인 생각이지만 Java 21은 너무 최근 버전이라 스타트업이 사용할 수도 있지만 기존 회사들은 역시 위 세 버전을 많이 사용하는 것 같다.
'개발 언어 > 자바' 카테고리의 다른 글
Java Spring 의 Servet 이해하고 만들어보기 (0) | 2025.03.24 |
---|---|
String, String format, 그리고 String builder (2) | 2024.01.29 |
Java 의 메모리 모델 (2) | 2024.01.21 |
Java 스레드(Thread) 분석/모니터링 도구들 (0) | 2024.01.17 |
자바의 Predicate, Consumer와 Supplier 그리고 응용 (0) | 2024.01.12 |