티스토리 뷰
자바가 늘 업데이트되면서 어떠한 부분이 달라지고 추가되었는지 궁금해졌다.
무엇보다 그 안에 내가 모르는 기능이 있다고 생각이 들었고 이러한 부분을 간단히 정리해보고 좀 더 알고 싶은 부분은 다른 글로써 자세히 정리해보겠다.
Java 7(2011)
Binary literals
int binary = 0b10101010;
// Java 7 이전에는 지원되지 않았다.
Java7 이전에는 이진수를 나타내기위해 2진수 문자열을 사용해야 했다. 그러나 Binary literals이 추가되면서 이진수를 더 직관적으로 표현할 수 있게 되었다.
향상된 타입 추론
// Java 7이후
Map<String, List<Integer>> map = new HashMap<>();
// 이전
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
이전 버전에서는 제네릭 컬렉션을 초기화할 때 타입 인수를 반복해서 명시해야 했다. Java7부터는 이를 향상시킴으로써 코드가 간결해지고 가독성이 향상되었다.
다중 Exception Handling
// 이후
try {...
} catch (IOException | SQLException ex) {
...
}
Java7부터 catch 부분에 여러 Exception을 설정할 수 있게 되었다.
try-with-resources
// 이후
BufferedReader brs = new BufferedReader(new FileReader("file.txt"))
try (BufferedReader br = brs) {
...
} catch (IOException ex) {
...
}
// 이전
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
...
} catch (...) {
...
}
finally {
br.close();
}
try-with-resources 구문이 추가되면서 좀 더 명확하고 간결한 코드를 작성할 수 있게되었다. 해당 구문에서 자동으로 자원을 해제해 줌으로써 finally를 통한 최종작업을 없앨 수 있게 되었다.
Java8(2014)
람다 표현식과 함수형 인터페이스
// 함수형 인터페이스 정의
@FuntionalInterface
interface MathOperation {
int operation(int a, int b);
}
public class LambdaExample {
public static void main(String[] args) {
// 람다 표현식으로 두 수를 더하는 MathOperation 구현
MathOperation addition = (a, b) -> a + b;
System.out.println("결과: " + addition.operation(5, 3));
}
}
람다는 익명 함수로 사용되며, 주로 인터페이스의 추상 메서드를 구현하는 데 사용된다.
함수형 인터페이스는 단 하나의 추상메서드만을 가지는 인터페이스를 뜻하며 @FuntionalInterface를 통해 이를 명시적으로 설정할 수도 있다.
Stream API
List<String> names = Arrays.asList("김", "나", "박", "이");
// 스트림을 사용하여 이름의 길이가 5 이상인 이름을 필터링
List<String> filteredNames = names.stream()
.filter(name -> name.length() >= 5)
.collect(Collectors.toList());
Stream API는 데이터 컬렉션을 다루는 강력한 함수형 API를 제공한다.
필터, 매핑, 그룹화, 병렬처리 등 여러 기능을 제공한다.
메서드 참조
List<String> names = Arrays.asList("김", "나", "박", "이");
// 메서드 참조를 사용하여 문자열 길이로 정렬
names.sort(Comparator.comparing(String::length));
메서드 참조는 람다 표현식을 더 간결하게 표현하는 방법이다.
인터페이스 Default Method
public interface TestInterface {
default void testMethod() {
...
}
}
Default 메서드 추가를 통해 인터페이스의 유연성이 한층 높아졌다. Default메서드는 구현 클래스에 대해 구현을 강요하지 않는다.
LocalDateTime
LocalDateTime now = LocalDateTime.now();
System.out.println("현재 날짜와 시간: " + now);
LocalDateTime future = now.plusHours(3);
System.out.println("3시간 후: " + future);
Java8에서 새롭게 도입된 날짜 및 시간 API이다.
Base64 인코딩
Java8에서는 java.util.Base64 클래스가 제공되어 Base64 인코딩 및 디코딩을 지원한다.
import java.util.Base64;
String originalText = "Hello, Base64!";
// 인코딩
String encodedText = Base64.getEncoder().encodeToString(originalText.getBytes());
System.out.println("인코딩된 문자열: " + encodedText);
// 디코딩
byte[] decodedBytes = Base64.getDecoder().decode(encodedText);
String decodedText = new String(decodedBytes);
System.out.println("디코딩된 문자열: " + decodedText);
Java9(2017)
인터페이스안의 private 메서드 선언
public interface TestInterface {
private void privateMethod() {
...
}
}
인터페이스 안에 private 메서드를 사용할 수 있음으로 default 메서드의 코드가독성을 늘릴 수 있게 되었다. private메서드는 인터페이스 내부에서만 사용할 수 있다.
향상된 try-with-resources
BufferedReader brs1 = new BufferedReader(new FileReader("file.txt"))
BufferedReader brs2 = new BufferedReader(new FileReader("file.txt"))
try (brs1, brs2) {
...
} catch (IOException ex) {
...
}
Java7과의 차이점이라고 한다면 try에서 복수개의 변수를 처리할 수 있게 되었다는 점이다.
ImmutableList를 위한 팩토리 메서드 추가
List<String> immutableList = List.of("사과", "바나나", "포도");
불변 리스트를 생성하는 팩토리 메서드가 추가되었다.
Collection.toArray
// 이후
list.toArray(String[]::new)
// 이전
list.toArray(new String[list.size()]) // 변환하고자 하는 list의 size를 배열의 크기로 넘겨줘야 했음
toArray 사용이 더욱 편리해졌다.
jshell - The Java Shell
Java9에서는 REPL(Read=Eval-Print Loop) 환경을 제공하는 jshell 도구가 도입되었다.
HTTP/2 client
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response: " + response.body());
HTTP/2를 지원하는 HTTP 클라이언트가 도입되었다. 이를 사용하여 HTTP 요청을 보내고 응답을 처리할 수 있다.
Modules(project Jigsaw)
Java 9에서는 모듈 시스템인 Project Jigsaw가 도입되었습니다. 모듈 시스템을 사용하여 코드를 모듈로 구성하고 모듈 간의 의존성을 관리할 수 있다.
글이 너무 길어져서 다음 글에서 10부터 다시 작성하겠습니다.ㅎㅎ
(참고)
https://corejava25hours.com/2021/02/12/java-7-vs-java-8-vs-java-9-vs-java-10/
'자바' 카테고리의 다른 글
[Java] Java 버전별 업데이트 사항(Java10~Java13) (0) | 2023.10.13 |
---|---|
[Java]Java에서 객체를 생성하는 5가지 방법 (0) | 2023.10.08 |
[Java] static 키워드가 뭘까? (0) | 2023.10.06 |
[Java] Map 인터페이스와 그 구현체들에 대해 알아보자. (0) | 2023.05.13 |
[Java] instanceof 와 getClass().equals()의 차이 (1) | 2023.04.25 |
- Total
- Today
- Yesterday
- 4673번
- 백준#잃어버린 괄호#1541
- 사탕 게임#백준#3085
- 회고
- 자바
- list
- arraylist
- 1978
- MVC
- 대충 만든 자판
- Spring
- controller
- 백엔드#게시판
- 오류
- 1316번
- 프로그래머스
- querydsl
- 덧칠하기
- 스프링
- HTTP#HTTP특징
- 게시판#자바#JPA#Entity
- 백준
- 서블릿#Servlet
- this()
- java
- 11659
- 7568
- 백준#서강근육맨#20300
- 파이썬
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |