우리가 프로젝트를 진행하다보면 여러 라이브러리와 언어의 버전과 관련된 선택을 해야하는 경우가 발생합니다.
누군가는 버전업되면 다 좋은거 아니야? 라고 생각할 수있지만, 개발자들은 이를 하나하나 따져보고 적절한 trade off를 통해서 사용하고자 하는 도구들의 버전을 선택해야 한다고 생각합니다.
이 글은 자바의 버전 선택과 관련된 내용을 담고있습니다.
Java라는 언어를 사용하는 사람들은 자바가 객체지향 언어인 것도 알고있고, 이식성의 장점이나 메모리를 자동으로 관리해주는 장점 등을 알고있다. 오늘은 이러한 부분을 넘어선 자바 8과 자바 11 버전을 비교해서 학습한 내용을 정리하려고 한다.
자바의 버전
현재까지 자바는 19버전까지 출시되어 있으며 올해 3월 20 버전이 출시된다고 알려저있다.
자바는 각 버전을 업데이트하면서 불필요한 기능들 지원하지 않고 새로운 방향성에 맞춰 추가된 기능들이 존재한다.
자바의 버전을 선택할 때 사람들은 11과 8을 많이 비교하는데, 직접 확인해보고 정리해보고자 한다.
-- Java 8 --
우선 Java 8 버전에서는 많은 부분들이 추가되고 삭제되었는데 대표적으로 아래와 같다.
- Lambda : 람다를 사용함으로써 더욱 간결하고 직관적으로 코드 구현이 가능해졌다.
- Stream api : 컬랙션을 처리해야하는 상황에서 반복적인 코드와 모호함이 섞인 코드, 멀티코어의 활용이 어려웠던 문제를 Stream을 통해 해결했다.
- Interface default and static methods : 인터페이스에 디폴트 메소드와 정적 메소드를 포함할 수 있게 되었다.
- function interface (함수형 인터페이스) : 하나의 기능을 제공하는 단 하나의 추상 메소드를 정의하는 인터페이스가 추가되었다.
- LocalDate, LocalTIme 시간관련 라이브러리 제공 : 날짜 관련 로직을 쉽게 작성할 수 있도록 도와줌
- Optional 지원 : 옵셔널을 통해 null에 대한 참조를 안전하게 가능하며, NPE 상황을 쉽게 처리가능 할 수 있도록 도와줌
- 배열의 병렬 처리 : 이전 버전까지만 해도 배열을 정리할 때는 Arrays.sort() 메소드를 사용했는데, 이 메소드는 정렬이 순차적으로 실행된다는 점, Java 8 버전부터는 Arrays.parallelSort()를 지원해줌으로써 병렬적으로 배열 정렬 가능
- 가비지 컬렉터(GC) : Java 8의 Default Gc는 Parall GC
자바 8 버전에서 추가되거나 업그레이드 된 내용 중 가장 직관적이고 체감되는 부분만 정리했다.
(외에도 다양한 점이 바뀌었으니 직접 확인해보는 것이 좋겠다... )
-- Java 11 --
- String class에 새로운 메소드 추가
- 컬렉션 인터페이스에 새로운 메소드 추가 : toArray() 메소드를 오버로딩 하는 메소드 추가 및 원하는 타입의 배열을 선택해서 반환이 가능해짐
- Predicate 인터페이스에 새로운 메소드 추가 : 부정을 나타내는 not() 메소드 추가
- 람다에서 로컬변수 var 사용 가능
- JavaC를 이용해 컴파일 하지않고 바로 자바 파일을 실행할 수 있음
- 가비지 컬렉터(GC) : Java 11의 Default GC는 G1 GC
마무리
- https://steady-coding.tistory.com/598https://learn.microsoft.com/ko-kr/java/openjdk/reasons-to-move-to-java-11
이글을 정리하면서 추가적으로 알게된 내용
데이터 컬렉션과 스트림의 차이
: 컬렉션의 주 관심사는 데이터를 어떻게 저장하고 접근하는지를 목표로 하지만, 스트림은 데이터를 어떻게 계산할지를 주 관심사로 두고있다는 점!
왜 사람들이 Java 8을 선택할까?
: 우선 Java 8 버전과 11버전의 지원 기간을 비교했을때, 8 버전은 2030년까지 지원을 해주고, 11버전은 26년까지 지원해준다. 이말을 해석해보면 우선 8버전을 사용하는 비중이 높고, 안정성이 높다는 것을 알 수 있다. 자바 8 버전은 외부 개발 툴과의 연동성에 있어서 가장 안정적이라는 말을 들어 본 적이 있다. 그리고 자바 11부터는 요금 정책이 바뀌어서 Oracle JDK가 아닌 Open JDK를 사용해야한다고 알고 있다. ( 결국 안정적인 측면이 가장 컸다)
'기술면접 관련 및 참고하기' 카테고리의 다른 글
Test Code 2부 (0) | 2023.03.22 |
---|---|
SSR(Server Side Rendering) 그리고 CSR(Client Side Rendering) (0) | 2023.03.22 |
JPA의 N+1 문제 (1) | 2023.03.04 |
비관적 락 (Pessimistic Lock )vs 낙관적 락 (Optimistic Lock) (0) | 2023.03.04 |
도커(Dokcer)가 뭔데? 도커 사용기 (2) | 2023.03.03 |