티스토리 뷰

서론

Java 21이 정식 출시되면서 많은 개발자들이 기대했던 새로운 기능과 성능 개선이 이루어졌습니다. 이번 버전에서는 가비지 컬렉션(GC) 최적화, 스위치 패턴 매칭, 가상 스레드(virtual threads) 안정화 등 다양한 기능이 추가 및 개선되었습니다. 이 글에서는 Java 21의 주요 변화와 개발자가 반드시 알아야 할 핵심 기능을 정리해 보겠습니다.

 


1. 가상 스레드(Virtual Threads) 안정화

Java 19에서 처음 도입된 가상 스레드(Virtual Threads) 가 Java 21에서 정식 기능으로 포함되었습니다.
가상 스레드는 기존의 플랫폼 스레드와 달리 경량 프로세스(thread-per-request) 모델을 지원하여 고성능 동시성(Concurrency) 개발을 가능하게 합니다.

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { 
	IntStream.range(0, 10).forEach(i -> executor.submit(() -> {
    Thread.sleep(1000); System.out.println("Task " + i + " completed."); 
    return null; 
    	})
    );
}
📌 가상 스레드는 기존의 플랫폼 스레드보다 메모리와 성능이 최적화되어, 대규모 트래픽이 필요한 애플리케이션에서 뛰어난 효율성을 발휘합니다.

2. 패턴 매칭을 활용한 switch 문 개선

Java 21에서는 패턴 매칭(Pattern Matching) 기능이 switch 문에서 정식 지원됩니다.
이를 통해 다양한 타입을 처리하는 로직을 더욱 간결하고 가독성 좋게 작성할 수 있습니다.

static String process(Object obj) { 
return switch (obj) 
	{ case Integer i -> "정수: " + i; case String s -> "문자열: " + s; 
    	case null -> "null 값"; default -> "알 수 없는 타입"; 
     };
 }
📌 기존 switch-case보다 간결하고, 타입 체크 및 변환을 자동으로 처리할 수 있어 코드 유지보수가 쉬워집니다.

3. 레코드 패턴(Record Patterns) 추가

레코드(Record) 객체 내부에서 패턴 매칭을 사용할 수 있게 되어, 데이터를 더 직관적으로 추출할 수 있습니다.

record Point(int x, int y) {} 
static void printPoint(Object obj) 
	{ if (obj instanceof Point(int x, int y)) 
    	{ System.out.println("X 좌표: " + x + ", Y 좌표: " + y); 
        }
     }
📌 레코드 패턴을 사용하면 데이터 객체에서 필요한 값만 쉽게 추출할 수 있습니다.

4. String Templates 미리보기 기능 추가

개발자들이 가장 기대했던 String Templates 기능이 미리보기(Preview) 상태로 추가되었습니다.
이를 통해 기존의 String.format()이나 + 연산자 없이도 문자열을 쉽게 조작할 수 있습니다.

 
String name = "후추"; int age = 30; String message = STR."이름: \{name}, 나이: \{age}"; 
System.out.println(message);

📌 더 이상 복잡한 String.format()을 사용할 필요 없이 간결한 문자열 템플릿을 활용할 수 있습니다.


결론

Java 21은 동시성(가상 스레드), 패턴 매칭(switch-case 개선), 레코드 패턴, String Templates 등의 강력한 기능을 포함하고 있습니다.
특히, 가상 스레드와 패턴 매칭 기능은 대규모 트래픽이 필요한 웹 애플리케이션 및 마이크로서비스 개발에 매우 유용합니다.

Java 21의 기능을 실무에 적극 활용하여 더 효율적인 개발 환경을 구축해 보세요!
앞으로도 Java의 새로운 동향을 지속적으로 다룰 예정이니, 다음 포스팅도 기대해 주세요!