티스토리 뷰

자바가 늘 업데이트되면서 어떠한 부분이 달라지고 추가되었는지 궁금해졌다.

무엇보다 그 안에 내가 모르는 기능이 있다고 생각이 들었고 이러한 부분을 간단히 정리해보고 좀 더 알고 싶은 부분은 다른 글로써 자세히 정리해보겠다.


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 7 vs 8 vs 9 vs 10 vs 11 vs 12 vs 13 vs 14 vs 15 vs 16 vs 17 vs 18 vs 19 vs 20 vs 21

VersionRelease DateJava 72011Java 82014Java 92017Java 102018Java 112018Java 122019Java 132019Java 142020Java 152020Java 162021Java 172021Java 182022Java 192022 Note – The latest stable releas…

corejava25hours.com

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함