반응형
1. 🚀 자바 버전별 차이점
자바는 꾸준한 업데이트를 통해 많은 변화와 개선을 거쳐왔습니다. 버전별로 어떤 차이점이 있는지 알아보겠습니다. 주요 버전으로는 Java 8, Java 9, Java 10, Java 11, Java 12, Java 13, Java 14, Java 15, Java 16, Java 17이 있습니다. 여기서 각 버전별로 주요 특징과 차이점을 설명하겠습니다.
🔍 Java 8
- 주요 특징
- 람다 표현식(Lambda Expressions)
- 스트림 API (Stream API)
- 기본 메소드 (Default Methods)
- java.time 패키지 (새로운 날짜와 시간 API)
- 장점
- 코드가 간결해지고, 멀티코어 프로세서를 효율적으로 사용할 수 있습니다.
- 새로운 날짜와 시간 API는 훨씬 직관적이고 사용하기 쉽습니다.
- 단점
- 새로운 기능들이 익숙하지 않아서 초기 학습 비용이 필요합니다.
- 예시 코드
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Java8Example {
public static void main(String[] args) {
// 람다 표현식을 이용한 리스트 필터링
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
System.out.println(filteredNames);
// 새로운 날짜와 시간 API 사용
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
Period p = Period.between(birthday, today);
System.out.println("You are " + p.getYears() + " years old.");
}
}
🔍 Java 9
- 주요 특징
- 모듈 시스템 (Module System)
- JShell (REPL)
- 스트림 API 개선
- 새로운 HTTP 클라이언트
- 장점
- 대규모 애플리케이션의 모듈화가 쉬워졌습니다.
- JShell을 통해 빠른 테스트와 프로토타이핑이 가능합니다.
- 단점
- 모듈 시스템에 대한 적응이 필요합니다.
- 기존 프로젝트를 새로운 모듈 시스템에 맞게 변경하는 데 시간이 걸릴 수 있습니다.
- 예시 코드
module com.example.myapp {
requires java.base;
requires java.sql;
}
// JShell 예시 (터미널에서 실행)
jshell> int sum(int a, int b) {
...> return a + b;
...> }
jshell> sum(5, 3)
🔍 Java 10
- 주요 특징
- 지역 변수 타입 추론 (Local-Variable Type Inference)
- G1 가비지 컬렉터 성능 개선
- 장점
- var 키워드를 사용하여 코드 가독성을 높일 수 있습니다.
- G1 가비지 컬렉터가 더욱 효율적으로 개선되었습니다.
- 단점
- var 키워드 사용 시 타입 추론에 주의가 필요합니다.
- 예시 코드
import java.util.List;
public class Java10Example {
public static void main(String[] args) {
var numbers = List.of(1, 2, 3, 4, 5);
for (var number : numbers) {
System.out.println(number);
}
// 타입 추론으로 인해 예상치 못한 결과가 발생할 수 있음
var text = "Hello, Java 10!";
System.out.println(text);
}
}
🔍 Java 11
- 주요 특징
- Long-Term Support (LTS) 버전
- 새로운 String 메소드 (lines, strip, repeat 등)
- HTTP 클라이언트 표준화
- 장점
- 장기 지원(LTS)으로 안정적인 사용이 가능합니다.
- 문자열 처리에 유용한 새로운 메소드가 추가되었습니다.
- 단점
- 일부 제거된 API에 대한 호환성 문제가 발생할 수 있습니다.
- 예시 코드
public class Java11Example {
public static void main(String[] args) {
String str = " Hello World! ";
System.out.println(str.strip()); // "Hello World!"
System.out.println("Java".repeat(3)); // "JavaJavaJava"
// HTTP 클라이언트 사용 예시
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.github.com"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
🔍 Java 12 이후 버전
각 버전별로 주요 특징을 간단히 정리해보겠습니다.
- Java 12
- Switch 표현식 (미리보기 기능)
- 새로운 JVM 메모리 관리 기능
- 예시 코드
public class Java12Example {
public static void main(String[] args) {
String day = "TUESDAY";
String result = switch (day) {
case "MONDAY", "FRIDAY", "SUNDAY" -> "Start of the week";
case "TUESDAY" -> "Midweek";
default -> "Weekday";
};
System.out.println(result); // "Midweek"
}
}
- Java 13
- 텍스트 블록 (미리보기 기능)
- 새로운 재사용 가능한 컴파일러 API
- 예시 코드
public class Java13Example {
public static void main(String[] args) {
String textBlock = """
{
"name": "Alice",
"age": 30
}
""";
System.out.println(textBlock);
}
}
- Java 14
- Switch 표현식 표준화
- NullPointerException 메시지 개선
- 예시 코드
public class Java14Example {
public static void main(String[] args) {
Object obj = null;
try {
obj.toString();
} catch (NullPointerException e) {
System.out.println("Caught exception: " + e.getMessage());
}
}
}
- Java 15
- 텍스트 블록 표준화
- ZGC 개선 및 새로운 숨겨진 클래스 기능
- 예시 코드
public class Java15Example {
public static void main(String[] args) {
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
System.out.println(html);
}
}
- Java 16
- 패턴 매칭 for instanceof
- 기록 클래스 (Record Classes)
- 예시 코드
public class Java16Example {
public static void main(String[] args) {
Object obj = "Hello, Java 16!";
if (obj instanceof String s) {
System.out.println(s.toUpperCase());
}
record Person(String name, int age) {}
Person person = new Person("Alice", 30);
System.out.println(person.name() + " is " + person.age() + " years old.");
}
}
- Java 17
- 또 다른 Long-Term Support (LTS) 버전
- 새로운 흥미로운 기능 추가 (패턴 매칭, 숨겨진 클래스 등)
- 예시 코드
public class Java17Example {
public static void main(String[] args) {
// Pattern matching for switch (preview)
Object obj = 123;
String result = switch (obj) {
case Integer i -> "Integer: " + i;
case String s -> "String: " + s;
default -> "Unknown type";
};
System.out.println(result); // "Integer: 123"
}
}
요약
자바는 각 버전마다 다양한 새로운 기능과 개선 사항이 도입되어 왔습니다. 주요 버전의 특징과 장단점을 이해하면 더 나은 선택을 할 수 있을 것입니다. 각 버전별 주요 변경 사항을 통해 필요에 맞는 자바 버전을 선택하고 활용하시기 바랍니다.
반응형
'Java' 카테고리의 다른 글
[JAVA] Java 메서드 참조 (0) | 2024.09.04 |
---|---|
[JAVA] Java Stream API 활용법 (0) | 2024.09.02 |
[JAVA] JAVA로 REST API 구현하기 (0) | 2024.07.19 |
[JAVA] String Boot에서 AOP를 활용한 로그인 시스템 구현방법 (0) | 2024.05.16 |
[JAVA]Java에서의 Deque 소개 (0) | 2024.04.30 |