1. Java 8 - LTS
1.0 종류
- 람다 표현식
- 함수형 인터페이스
- 스트림 API
- 인터페이스 default, static method
- Optional
1.1 람다 표현식
익명 클래스 간결 표현
Runnable run = () -> System.out.print("hello ksb");
1.2 함수형 인터페이스
하나의 추상 메서드만 가지는 인터페이스
@FunctionalInterface
interface MyFunctionalInterface {
void myMethod();
}
기본적으로 Predicate, Consumer, Supplier, Funtion, Comparator, Runnable, Callable 제공
1.3 스트림 API
간결한 코드, 쉬운 병렬 코드 작성 가능
List<Integer> numbers = Arrays.asList(1, 2, 3);
numbers.stream().forEach(System.out::println);
1.4 인터페이스 default, static 메소드
필수로 구현하지 않아도 되는 default 메소드 → 기존의 인터페이스에 새로운 기능 추가 가능
public interface Test{
void test();
default int testDefault(){
return 1;
};
}
static 하게 사용할 수 있는 static method
public interface Test{
void test();
static int testStatic(){
return 1;
}
}
1.5 Optional
주로 null 처리를 위해 사용
List<String> names = Optional.ofNullable(tmp).orElseThrow(() -> new IllegalArgumentException("잘못된 변수"))
2. Java 9
2.0 종류
- 컬렉션 팩토리 method
- Stream 기능 추가
- Optional 기능 추가
- 인터페이스 private method
- 모듈 시스템
2.1 컬렉션 기능 추가
list, set, map 등에 불변 객체 생성
List<String> list = List.of("one", "two");
Set<String> set = Set.of("one", "two");
Map<String, String> map = Map.of("one key", "one value", "two key", "two value");
2.2 Stream 기능 추가
takewhile등 새로운 기능
List.of(1, 2, 3, 4).stream().takeWhile(i -> i % 2 == 0).collect(Collectors.toList());
2.4 Optional 기능 추가
stream 등 새로운 기능
Optional.of("one").stream().collect(Collectors.toList());
2.4 인터페이스 private method
인터페이스 내 코드 재활용
public interface Test {
void test();
private int testPrivate(){
return 1;
}
}
2.5 모듈 시스템
코드의 재사용성 증가, 애플리케이션 크기 감소, 보안 강화
module com.example.myapp {
requires java.base;
exports com.example.myapp;
}
3. Java 10
3.0 종류
- 지역 변수 타입 추론
3.1 지역 변수 타입 추론
var
var list = List.of("a", "b", "c"); // List<String>으로 추론됨
for (var item : list) {
System.out.println(item);
}
4. Java 11 - LTS
4.0 종류
- 람다 파라미터 지역 변수 추론
4.1 람다 파라미터 지역 변수 추론
람다식에서 var 사용
List<String> list = List.of("apple", "banana", "cherry");
List<String> upperCaseList = list.stream().map((var s) -> s.toUpperCase()).collect(Collectors.toList());
5. Java 12
5.0 종류
- 향상된 스위치문 preview
6. Java 13
6.0 종류
- Text Block preview
7. Java 14
7.0 종류
- 향상된 스위치문 공식 지원
- 향상된 NullPointerException
- instanceof 패턴 매칭 preview
- record 타입 preview
7.1 향상된 스위치문 표준화
switch문의 간결화
int day = 0;
String size = switch (day){
case 1, 2, 3 -> "s";
case 4, 5, 6 -> "m";
case 7, 8, 9 -> "l";
default -> "none";
};
7.2 향상된 NullPointerException
NullPointerException 발생시 예외 메시지 상세화해서 반환
8. Java 15
8.0 종류
- Text Block 공식 지원
- sealed 클래스 preview
8.1 Text Block 공식 지원
public class TextBlockExample {
public static void main(String[] args) {
String json = """
{
"name": "John",
"age": 30,
"city": "New York"
}
""";
System.out.println(json);
}
}
9. Java 16
9.0 종류
- record 클래스 공식 지원
- instanceof 패턴 매칭 공식 지원
- 스트림 API toList() 추가
9.1 record 클래스 공식 지원
데이터 객체
record Point(int x, int y){}
9.2 instanceof 패턴 매칭 공식 지원
타입 변수 사용
if(obj instance of String message){
System.out.print(message);
}
9.3 스트림 API toList() 추가
불변 객체 리스트로 변환하는 기능
List<Integer> list = Set.of(1, 2, 3).stream().toList();
10. Java 17 - LTS
10.0 종류
- sealed 클래스 공식 지원
10.1 sealed 클래스 공식 지원
원치않는 상속 오류 방지
public sealed class Parent permits Son{}
public final class Son extends Parent{}
11. Java 18
11.0 종류
- 향상된 switch문 새로운 기능 preview
12. Java 19
12.0 종류
- 가상 쓰레드 preview
- record 패턴 매칭 preview
- switch 패턴 매칭 preview
13. Java 20
13.0 종류
- 가상 쓰레드 새로운 preview
- record 패턴 매칭 새로운 preview
- switch 패턴 매칭 새로운 preview
14. Java 21 - LTS
14.0 종류
- SequencedCollection
- 가상 쓰레드 공식 지원
- record 패턴 매칭 공식 지원
- swtich 패턴 매칭 공식 지원
14.1 SequencedCollection
일괄적인 방법으로 데이터 탐색 및 조작
list.getFirst();
deque.getFirst()
14.2 가상 쓰레드 공식 지원
JVM에서 관리하는 경량 쓰레드
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
}
14.3 record 패턴 매칭 공식 지원
static void printSum(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.println(x+y);
}
}
14.4 Switch 패턴 매칭 공식 지원
타입 패턴 매칭 및 null 검사
static String formatterPatternSwitch(Object obj) {
return switch (obj) {
case null -> "OTL";
case Integer i -> "int";
case Long l -> "long"
case Double d -> "double"
case String s -> "string"
default -> "default"
};
}
참고
'삽질' 카테고리의 다른 글
하둡 (0) | 2024.08.08 |
---|---|
서비스 지향 아키텍처(SAO) 특징과 MSA와의 차이점 (0) | 2024.08.06 |
Mongosh로 몽고DB 접속 및 루트 사용자 생성 (0) | 2024.05.26 |
Feign Client Decode Exception (0) | 2024.05.26 |
@EnableBatchProcessing 사용시 설정 Back Off (0) | 2024.05.04 |