언어적 기능
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));
list.forEach(System.out::println);
interface MyInterface {
default void newMethod() {
System.out.println("New Feature");
}
}
라이브러리 기능
모듈 시스템 (Project Jigsaw)
module com.my.module {
requires java.base;
exports com.my.package;
}
컬렉션 팩토리 메서드
List<String> list = List.of("a", "b", "c");
Map<String, String> map = Map.of("key1", "value1", "key2", "value2");
기타 기능
var list = new ArrayList<String>(); // 타입 추론
var number = 42; // int로 추론주요 기능
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
String multiline = "hello\nworld";
multiline.lines().forEach(System.out::println);
런타임 기능
Switch 표현식 (Standard)
// 기존 switch 문
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
default:
numLetters = 8;
}
// 새로운 switch 표현식
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> 8;
};
Records (Preview)
// 기존 방식
public class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() { return x; }
public int getY() { return y; }
@Override
public boolean equals(Object o) { ... }
@Override
public int hashCode() { ... }
@Override
public String toString() { ... }
}
// Record 사용
record Point(int x, int y) {
// 컴팩트 생성자로 유효성 검사 추가 가능
public Point {
if (x < 0 || y < 0) {
throw new IllegalArgumentException();
}
}
}
Sealed Classes (Preview)
// 상속 가능한 클래스를 Circle, Rectangle, Square로 제한
public sealed class Shape
permits Circle, Rectangle, Square {
// 공통 메서드 정의
}
// 반드시 final, sealed, non-sealed 중 하나로 선언해야 함
public final class Circle extends Shape {
// Circle 구현
}
public final class Rectangle extends Shape {
// Rectangle 구현
}
public final class Square extends Shape {
// Square 구현
}
Pattern Matching for instanceof
// 기존 방식
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
// 패턴 매칭 사용
if (obj instanceof String s) {
System.out.println(s.length());
}
String Templates (Preview)
String name = "world";
// 기존 방식
String message = "Hello " + name + "!";
// String template 사용
String message = STR."Hello \{name}!";
// JSON 생성 예시
String json = STR."""
{
"name": "\{name}",
"age": \{age},
"city": "\{city}"
}
""";
Sequenced Collections
SequencedCollection<String> list = new ArrayList<>();
list.addFirst("first");
list.addLast("last");
String first = list.getFirst();
String last = list.getLast();
// 역순 순회
SequencedCollection<String> reversed = list.reversed();
Record Patterns
record Point(int x, int y) {}
record Rectangle(Point upperLeft, Point lowerRight) {}
// 기존 방식
if (obj instanceof Rectangle) {
Rectangle r = (Rectangle) obj;
Point ul = r.upperLeft();
Point lr = r.lowerRight();
// 좌표 처리
}
// Record Pattern 사용
if (obj instanceof Rectangle(Point(int x1, int y1), Point(int x2, int y2))) {
// 직접 x1, y1, x2, y2 사용 가능
}
Q: Java 8에서 가장 중요한 변화는 무엇이며, 이것이 Java 생태계에 미친 영향을 설명해주세요.
A: Java 8의 가장 중요한 변화는 Lambda 표현식과 Stream API의 도입입니다. 이는 Java에 함수형 프로그래밍의 개념을 도입한 것으로, 코드의 간결성과 가독성을 크게 향상시켰습니다. 특히 컬렉션 처리에서 선언적 프로그래밍이 가능해졌으며, 이는 현대적인 Java 프로그래밍의 기초가 되었습니다. 또한 병렬 처리를 쉽게 구현할 수 있게 되어 성능 개선에도 크게 기여했습니다.
Q: Java 9의 모듈 시스템 도입 목적과 장점은 무엇인가요?
A: Java 9의 모듈 시스템(Project Jigsaw)은 Java 플랫폼의 확장성과 보안을 개선하기 위해 도입되었습니다. 주요 목적은 강력한 캡슐화를 통한 보안 강화, 의존성의 명시적 선언을 통한 애플리케이션 구조 개선, 그리고 JDK 자체의 모듈화를 통한 더 작은 런타임 구성 가능성 제공입니다. 이를 통해 애플리케이션의 크기를 줄이고, 시작 시간을 개선하며, 전체적인 보안성을 향상시킬 수 있게 되었습니다.
Q: Java의 LTS 버전들의 특징과 차이점을 설명해주세요.
A: Java의 LTS 버전들은 각각 중요한 특징을 가지고 있습니다. Java 8은 Lambda와 Stream API를 통해 함수형 프로그래밍을 도입했고, Java 11은 HTTP 클라이언트 등 모던 애플리케이션 개발에 필요한 기능들을 표준화했습니다. Java 17은 봉인 클래스와 패턴 매칭 등 언어적 기능을 강화했으며, Java 21은 Virtual Thread를 통해 동시성 프로그래밍의 새로운 패러다임을 제시했습니다. 각 LTS 버전은 이전 버전의 개선사항을 포함하면서도, 새로운 기능과 성능 개선을 제공하여 점진적인 발전을 이루어왔습니다.