일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 넥사크로
- Python
- SQL
- Javascript
- 리눅스
- 네트워크
- 책
- 명령어
- 후기
- 티스토리챌린지
- IntelliJ
- docker
- springboot
- mysql
- mssql
- java
- Linux
- git
- oracle
- MariaDB
- 웹
- 독서
- spring
- DBMS
- CSS
- 책추천
- JAVA8
- pandas
- 오블완
- PostgreSQL
- Today
- Total
hanker
[JAVA] java 8버전과 java 11버전의 핵심 차이점 본문
Java 8 이후 3년 만에 출시된 Java 11 버전 (LTS 버전)의 주요 차이점들을 알아보자.
주요 요약표
구분 | Java 8 | Java 11 |
HTTP 클라이언트 | HttpURLConnection | 새로운 HTTP Client API |
String 처리 | 기본 메서드 | isBlank(), strip(), repeat() 등 추가 |
파일 I/O | 복잡한 코드 | Files.readString(), writeString() |
라이선스 | 무료 | Oracle JDK 유료화 (OpenJDK 무료) |
1. 라이선스 정책의 변화
Java 11의 가장 큰 변화 중 하나는 Oracle JDK의 라이선스 정책이다.
Oracle JDK는 상업적 사용 시 유료 라이선스가 필요하게 되었지만, OpenJDK는 여전히 무료로 사용할 수 있다.
대부분의 기업은 OpenJDK 기반 배포판으로 전환 중
https://www.oracle.com/java/technologies/javase/jdk-faqs.html
Oracle JDK License General FAQs
Following the same pattern as Oracle JDK 17, Oracle JDK 21 updates are planned to be made available under the NFTC until September of 2026, one year after the next release that Oracle currently plans to offer long term support for, which is Java 25 in Sept
www.oracle.com
2. 새로운 HTTP Client API
Java 11에서는 기존의 HttpURLConnection을 대체할 새로운 HTTP Client API가 도입되었다.
// Java 8 (기존 방식)
URL url = new URL("https://api.example.com/data");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 추가 설정.. (많은 설정 코드 필요)
// Java 11 (새로운 HTTP Client)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
- HTTP/2 지원 (성능 향상)
- 비동기 처리 가능
- WebSocket 지원
- 더 직관적인 API
3. String 클래스의 새로운 메서드들
Java 11 버전에서는 String 처리를 더욱 편리하게 해주는 메서드들이 추가되었다.
String text = " Hello World ";
// isBlank() - 빈 문자열이나 공백만 있는지 확인
System.out.println("".isBlank()); // true
System.out.println(" ".isBlank()); // true
// strip(), stripLeading(), stripTrailing() - 유니코드 공백 제거
System.out.println(text.strip()); // "Hello World"
// repeat() - 문자열 반복
System.out.println("Java".repeat(3)); // "JavaJavaJava"
// lines() - 줄 단위로 분할하여 Stream 반환
String multiline = "Line1\nLine2\nLine3";
multiline.lines().forEach(System.out::println);
4. 파일 I/O 개선사항
파일 읽기와 쓰기가 훨씬 간단해졌다.
// 파일 내용을 String으로 읽기
String content = Files.readString(Paths.get("file.txt"));
// String을 파일에 쓰기
Files.writeString(Paths.get("output.txt"), "Hello Java 11");
5. Local Variable Type Inference 확장 (var 키워드)
Java 10 에서 도입된 var 키워드가 Java 11에서 람다 표현식의 매개변수에서도 사용이 가능해졌다.
// Java 11에서 가능
List<String> names = List.of("Alice", "Bob", "Charlie");
names.stream()
.map((var name) -> name.toUpperCase())
.forEach(System.out::println);
6. 컬렉션 팩토리 메서드
Java 9 부터 도입되었지만, Java 8 버전 기능에는 없던 불변 컬렉션 생성 방법이다.
// Java 8
List<String> list = Arrays.asList("A", "B", "C");
Set<String> set = new HashSet<>(Arrays.asList("X", "Y", "Z"));
// Java 11
List<String> list = List.of("A", "B", "C");
Set<String> set = Set.of("X", "Y", "Z");
Map<String, Integer> map = Map.of("key1", 1, "key2", 2);
7. Optional 클래스 개선
Optional 클래스에 새로운 메서드들이 추가되었다.
Optional<String> optional = Optional.of("value");
// isEmpty() - 값이 없는지 확인 (isPresent()의 반대)
System.out.println(optional.isEmpty()); // false
// ifPresentOrElse() - 값이 있으면 실행, 없으면 다른 동작 실행
optional.ifPresentOrElse(
value -> System.out.println("Value: " + value),
() -> System.out.println("No value")
);
8. 성능 및 보안 개선사항
가비지 컬렉션 (GC) 개선
- ZGC (Z Garbage Collector): 초저지연 GC (실험 기능)
- Epsilon GC: 메모리 할당만 수행하는 특수 GC
- G1GC: 기본 GC로 설정, 안정성 및 예측성 향상
보안 개선사항
- TLS 1.3 지원
- ChaCha20-Poly1305 암호화 알고리즘 지원
- 전반적인 보안 기능 강화
정리
Java 11 버전은 Java 8 버전 이후 가장 중요한 LTS 릴리스이다.
참고.
https://docs.oracle.com/en/java/javase/11/
JDK 11 Documentation - Home
The documentation for JDK 11 includes developer guides, API documentation, and release notes.
docs.oracle.com
'JAVA' 카테고리의 다른 글
[JAVA] java 11 버전과 java 17 버전의 핵심 차이점 (3) | 2025.05.29 |
---|---|
[JAVA] Java 11 이상에서 sun.misc.BASE64Encoder 대체하기 (1) | 2025.05.28 |
Java - 지역 번호, 핸드폰 번호 변환 (format) (0) | 2025.03.11 |
Java - Custom Annotation 만들기 (기본 개념과 구현 방법) (0) | 2025.02.25 |
Java - Enum 클래스 사용법 (0) | 2025.02.22 |