본문 바로가기
Programming

JAVA 모던 Java 문법 (Java 8~21)

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 11. 29.
반응형

모던 Java 문법 (Java 8~21)

Java는 꾸준히 진화해 왔습니다. 이번 시간에는 Java 8부터 21까지 새롭게 추가된 현대적 문법들을 다룹니다. 각 문법은 생산성 향상, 가독성 개선, 그리고 함수형 프로그래밍과 비동기 처리를 위한 기반을 제공합니다.


📌 목차

  1. record & var
  2. sealed class
  3. 개선된 switch 문
  4. 텍스트 블록 (Text Blocks)
  5. 패턴 매칭
  6. 가상 스레드 (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