자바 버전의 특징들을 알기 전에 먼저 어떤버전을 많이 사용하는지 알아보고 가는게 좋을꺼같다. 결과적으로 자바 8,11,17버전이 제일 많이 사용한다. 특히 자바 17버전이 눈에띄게 사용량이 늘었다는게 중요한거같다. 그리고 저는 자바 17버전을 사용하고 있으며 다른 버전은 사용을 해보진 않아서 어떤 특징이 있는지 모르지만 그렇다고 자바 17버전을 사용한다고 잘 알고있냐? 그것도 아니라.. 하지만 자바17버전의 사용량이 늘어난 중요한 요인중 하나가 무엇이냐?라고 물어본다면 저는 스프링 부트 3.0에서 자바17이상을 사용해야 한다는 점이 자바 17버전을 사용하게 만들었다고 생각합니다.
그럼 자바 8,11,17버전의 대해 알아보겠습니다.
Stream은 컬렉션의 저장 요소를 하나씩 순회하면서 처리할 수 있는 코드 패턴이며, 람다식을 지원한다는 점과 내부 반복자를 사용하기 때문에 병령 처리가 쉽다는 특징을 가집니다.
람다식이란 함수를 간단한 식으로 표현하는 방법을 말하며 메서드의 이름과 반환값이 생략된다는 점에서 익명 함수라고도 불린다.
interface default method
결과
java 8버전 이전의 인터페이스는 메서드 정의만 할 수 있었고 구현은 할 수 없었는데 8버전 이후부터는 default method라는 개념이 생기면서 구현 내용도 인터페이스에 포함시킬 수 있게 되었다.
Optional class
결과
Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE(Null Pointer Exception)가 발생하지 않도록 도와주는 역활을 하며 따라서 예상치 못한 Null Pointer Exception이 발생될만한 상황에서도 예시와 같이 제공되는 메서드를 통해 간단하게 예외처리를 할 수있다.
(var s1, var s2) -> s1 + s2
var 키워드는 java 10에서 추가되었습니다. var 키워드를 사용하는 경우 데이터 유형을 지정하지 않고 변수를 선언하고 정의할 수 있으며, 컴파일러는 할당된 데이터 유형에 따라 데이터 유형을 결정하게 된다.
java 11에서 부터 위와 같은 구문이 지원되면서 람다 인자에 대한 타입 추론의 유연성이 추가 되었으며, 람다식에 var 키워드를 사용할 수 있게 되면서 아래와 같은 파라미터 어노테이션도 적용할 수 있게 되었습니다.
(@NonNull var s1, @Nullable var s2) -> s1 + s2
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://test-api.com/posts"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
11버전에서 도입된 Java HttpClient API는 최신 HTTP 표준의 클라이언트를 구현하며, 동기 및 비동기 프로그래밍 모델인 HTTP/1.1 및 HTTP/2를 지원한다.
public sealed class Shape permits Circle, Square {
// common fields and methods
}
public final class Circle extends Shape {
// circle-specific fields and methods
}
public final class Square extends Shape {
// square-specific fields and methods
}
17버전에서 추가된 Seald Class, Interface는 상속하거나, 구현할 클래스를 지정해 두고, 해당 클래스들만 상속또는 구현을 허용하는 키워드이며 개발자는 seald 키워드를 통해 어떤 클래스가 해당 클래스를 상속 또는 구현하는지를 쉽게 알 수 있고, 또 제한할 수 있습니다.
//Lombok 사용 예시
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Getter
public class Person {
private final String name;
private final String address;
}
//record class 예시
public record Person (String name, String address) { }
Record 키워드는 14버전에서 프리뷰 기늘으로 추가되었고, 16버전에서 공식 기능이 되었고, Record 클래스는 불변 데이터를 객체 간에 전달하는 작업을 간단하게 만들어주며, record를 사용함으로써 불편한 코드를 제거할 수 있고, 적은 코드로도 명확한 의도를 표현할 수 있다는 특징이 있습니다.
3.텍스트 블록
String html1 = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
" </html>\n";
// Text Blocks
String html2 = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
텍스트 블록은 java 13, 14버전에서 프리뷰로 추가 되었고 15버전에서 정식으로 발표되었는데 멀티 라인의 문자열을 에스케이프 시퀀스 없이 사용함으로 소스 코드 작성을 편리하게 하고, 코드의 가독성을 높이는데 주된 목적을 가지고 있다.
끝으로... 이번에 자바버전을 알아보는 건데 진짜. 이해하는데 힘든 부분들이 너무 많았다. 그래서 진짜로 더 공부하는 시간을 무조건 가져야 겠다는 생각을했습니다. 제가 17버전을 사용중인데 아직 저 기능들을 사용안해봐서 17버전 조차 이해를 못했다.. 이번 포스팅은 참으로 힘든 포스팅이다.. 8버전 11버전 17버전은 무조건 다시 공부하는 시간을 가지겠습니다.