모던 Java 문법 (Java 8~21)
Java는 꾸준히 진화해 왔습니다. 이번 시간에는 Java 8부터 21까지 새롭게 추가된 현대적 문법들을 다룹니다. 각 문법은 생산성 향상, 가독성 개선, 그리고 함수형 프로그래밍과 비동기 처리를 위한 기반을 제공합니다.
📌 목차
- record & var
- sealed class
- 개선된 switch 문
- 텍스트 블록 (Text Blocks)
- 패턴 매칭
- 가상 스레드 (Virtual Threads, Project Loom)
📦 1. record & var
record는 불변 객체를 정의할 때 매우 유용하며, 자동으로 생성자, getter, toString, equals, hashCode 메서드를 제공합니다. var는 Java 10부터 도입되어, 명시적 타입 선언 없이 변수 타입을 추론할 수 있게 합니다. 이는 특히 반복문이나 지역 변수에서 유용하게 사용됩니다.
// Java 14+ record
public record Person(String name, int age) {}
Person p = new Person("Alice", 30);
System.out.println(p.name());
// Java 10+ var
var message = "Hello, World!";
System.out.println(message);
🧲 2. sealed class (Java 17+)
sealed 클래스는 상속 계층을 명시적으로 제한할 수 있어 도메인 모델링이나 안정적인 아키텍처 구성에 도움을 줍니다. permits 키워드로 허용된 클래스만 상속할 수 있습니다.
public sealed class Shape permits Circle, Rectangle {}
final class Circle extends Shape {}
final class Rectangle extends Shape {}
🌀 3. 개선된 switch 문 (Java 14+)
기존의 switch 문은 많은 break 문과 중복이 있었습니다. Java 14부터는 표현식 기반으로 개선되어 더욱 간결하고 오류 가능성이 줄어든 코드 작성을 지원합니다. 또한 yield 키워드를 통해 값을 반환할 수 있습니다.
int score = 2;
String grade = switch (score) {
case 1 -> "Poor";
case 2 -> "Average";
case 3 -> "Good";
default -> "Unknown";
};
System.out.println("평가: " + grade);
📝 4. 텍스트 블록 (Text Block, Java 15+)
복잡한 문자열(HTML, JSON, SQL 등)을 표현할 때 텍스트 블록을 사용하면 줄 바꿈이나 따옴표 이스케이프에 대한 부담 없이 가독성 높은 코드를 작성할 수 있습니다.
String json = """
{
"name": "John",
"age": 25
}
""";
System.out.println(json);
🔍 5. 패턴 매칭 (Pattern Matching)
기존의 instanceof는 타입 확인 후 별도로 캐스팅해야 했습니다. Java 16부터는 패턴 매칭을 통해 조건문 내에서 타입 확인과 변수 선언을 동시에 할 수 있어 코드가 간결해집니다.
// instanceof + pattern matching (Java 16+)
Object obj = "Hello, Java";
if (obj instanceof String s) {
System.out.println("문자열 길이: " + s.length());
}
⚙️ 6. 가상 스레드 (Virtual Threads, Project Loom, Java 21)
가상 스레드는 기존의 OS 스레드보다 훨씬 가볍고 효율적으로 수천 개의 동시 실행을 가능하게 합니다. Java 21부터 정식 지원되며, 고성능 서버 애플리케이션 개발에 큰 전환점이 됩니다.
Runnable task = () -> System.out.println("가상 스레드 실행 중...");
Thread.startVirtualThread(task);
기존의 Thread 기반 처리보다 startVirtualThread를 사용하면 리소스를 훨씬 적게 소모하면서도 높은 동시성을 제공합니다. 예를 들어, 웹 서버에서 요청을 처리할 때 각각의 요청을 가상 스레드로 처리하면 보다 적은 비용으로 높은 확장성을 확보할 수 있습니다.
'Programming' 카테고리의 다른 글
| C# 소개 (0) | 2025.12.01 |
|---|---|
| JAVA JVM 구조 및 튜닝 (0) | 2025.11.30 |
| JAVA Stream & 람다식 (46) | 2025.11.28 |
| JAVA 리플렉션과 어노테이션 (63) | 2025.11.27 |
| JAVA 디자인 패턴 (40) | 2025.11.26 |