-
[자바] 자바 버전별 특징 간단 정리자바 2022. 12. 23. 23:48728x90
자바는 하위 호환성이 높기에 특정 자바 버전만을 공부할 필요가 없다.
JAVA 7
1. Type Inference ( 타입 추론 )
- 제네릭 클래스의 생성자 호출 시 필요한 타입 인자를 컴파일러가 추론할 수 있으면, < > 로 대체 가능
// before version 7 List<String> list = new ArrayList<String>(); // after version 7 List<String> list = new ArrayList<String>();
2. Switch 문 문자열 허용
3. try-with-resources
- 기존에는 finally 블록으로 자원 해제하는 코드가 중복, try에서 자원 생성하고 사용해도 finally 블록으로 종료할 필요 없이 try 끝나면 자동 종료
4. 멀티캐치 -> 반복되는 코드 감소가능
5. ForkJoinPool
- 분할-정복 방식을 위한 ForkJoinPool 클래스 제공 → 이 클래스는 분할된 작업을 병렬로 처리해주면서 CPU 성능을 더 사용하여 처리 시간 단축이 가능해짐
- Fork Join Framework인데, 기본적으로 쓰레드 풀 서비스의 일종이다.
- 기본 개념은 큰 업무를 작은 업무 단위로 쪼개고, 그것을 각기 다른 CPU에서 병렬로 실행한 후 결과를 취합하는 방식이다. ( 먼저 쓰래드를 쪼개서 업무를 수행(Fork) 시키고 더이상 쪼갤 수 없으면 결과를 Join해서 값을 취합한다 )
분할 - 정복이란 : 둘 이상의 부분으로 나눈뒤에 각 부분에 대해서 수행을 하고 값들을 취합하는 것
JAVA 8
1. Lambdas
- 익명 내부 클래스를 람다 표현식으로 바꿀 수 있다
2. Interface 클래스에 구현체 작성 가능
3. Optional 클래스
- null 체크를 해주는 클래스
4. Collections & Streams
- List 반복문을 깔끔하고 구현을 편하게 해주는 Stream API ( 순차 / 병렬 작업을 지원하는 )를 사용할 수 있다.
5. method reference 가능
- lambda (Soccer s) -> s.getGoal() // method reference Soccer::getGoal
JAVA 9
1. Colletions
- 컬렉션에 배열을 쉽게 생성할 수 있는 메서드 추가
2. Stream
- 이전에는 filter 메서드 사용해서 전체 스트림 반복하면서 PREDICATE 적용, 9 이후에는 takeWhile, dropWhile, iterate 메서드 등 가능
// 50이하 요소 선택 List<Integer> list = num.stream() .takeWhile(i -> i <= 50 ) .collect(toList()) // 50이하 요소 선택 List<Integer> list = num.stream() .dropWhile(i -> i <= 50 ) .collect(toList())
3. Optional
- 유용한 메서드 추가
1. or() 2. ifPresentOrElse()
4. Interface에 private 메서드 정의 가능
JAVA 10
1. 지역변수 타입 추론 ( var )
- 지역 변수 타입을 var 로 지정 가능
2. GC Interface
- 다양한 GC의 코드 고립도를 향상하는 인터페이스를 도입
JAVA 11
1. String, Files 클래스에 새로운 메서드 추가
2. Lambdas Type Reference ( var )
- 람다 표현식에서 타입 추론 ( var ) 사용 가능
JAVA 14
1. 스위치 표현(Standard)
Java SE 12 및 13에서 preview였던 스위치 표현식이 이제 표준화되었습니다.
-> 스위치 표현식이 값을 반환 가능하며 fall-through/break 문제 없이 표현식에 람다 스타일 구문을 사용 가능
int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; default -> { String s = day.toString(); int result = s.length(); yield result; } };
2. record(preview)
Java로 많은 상용구를 작성하는 고통을 완화하는데 도움이 되는 레코드 클래스가 있습니다.
데이터, getter/setter, equals/hashcode, toString만 포함되는 이 Java SE 14 이전 클래스
final class Point { public final int x; public final int y; public Point(int x, int y) { this.x = x; this.y = y; } } *// state-based implementations of equals, hashCode, toString// nothing else*
레코드 사용
record Point(int x, int y) { }
3. 유용한 NullPointerExceptions
NullPointerExceptions은 정확히 어떤 변수가 null인지 설명합니다.
author.age = 35; --- Exception in thread *"main"* java.lang.NullPointerException: Cannot assign field *"age"* because *"author"* is null
java 8 , 11 , 17은 LTS (long term support) 버전으로 유지보수기간이 길기에 3가지 버전을 자주 쓴다
'자바' 카테고리의 다른 글
[자바] 객체지향적인 설계에 대한 정리 (0) 2022.10.27 [자바] Youtub Tutorial 게임을 만들면서 정리한 점 ( 주석 및 정리 ) (1) 2022.09.19 [자바] 참조 (0) 2022.08.06 [자바] 다형성 (0) 2022.08.06 [자바] 인터페이스 (0) 2022.08.05