Java 21의 JEP 440은 데이터 탐색을 위한 기록 패턴을 도입하는 반면, JEP 441은 스위치 문에 패턴 매칭을 제공하여 데이터 지향 프로그래밍을 간소화합니다.
끊임없이 발전하는 소프트웨어 개발의 세계에서 데이터는 중심적인 역할을 합니다. 데이터를 효율적으로 처리하고 처리하는 것은 개발자들에게 가장 중요한 관심사입니다. 자바는 가장 널리 사용되는 프로그래밍 언어 중 하나로서 자바 21의 최신 향상된 기능으로 데이터 중심 프로그래밍의 중요성을 인정합니다. JEP(Java Enhanced Proposals) 두 가지 중요한 것이 눈에 띕니다: JEP 440과 JEP 441.
JEP 440: 패턴 기록
JEP 440은 모두 레코드 패턴에 관한 것으로, 자바 프로그래밍 언어의 데이터 조작 능력을 크게 향상시키는 기능입니다. 레코드 패턴은 레코드 값을 해체하는 새로운 방식을 도입하여 데이터 탐색과 처리를 보다 선언적이고 합성 가능하게 만듭니다.
레코드 패턴 이해
사용자 엔티티와 UserCreatedEvent 및 UserDeleteedEvent의 두 레코드가 있는 시나리오를 생각해 보십시오. 이 레코드는 사용자 활동과 관련된 이벤트를 나타냅니다.
@Test
public void shouldGetEventDeleted(){
User otaviojava = new User("otaviojava");
Supplier<User> userSupplier = new UserDeletedEvent(otaviojava, Instant.now(), "nope reason");
var log = log(userSupplier);
Assertions.assertEquals(otaviojava, log.get());
}
이 예제에서 UserDeleteedEvent 레코드는 영향을 받는 사용자, 타임스탬프 및 이벤트의 이유를 포함한 특정 속성으로 생성됩니다. 레코드 패턴을 사용하여 UserDeleteedEvent를 효율적으로 해체하고 지루한 if-else 검사 없이 UserDeleteedEvent의 속성에 액세스할 수 있습니다.
레코드 패턴을 사용한 레코드 해체
데이터 탐색을 위한 기록 패턴의 힘을 보여주는 로그 방법에 대해 알아보겠습니다:
private Optional<User> log(Supplier<User> supplier){
if(supplier instanceof UserCreatedEvent(User user, Instant instant) ){
System.out.println("User created at " + instant + " with username " + user.username());
return Optional of(user);
} else if (supplier instanceof UserDeletedEvent(User user, Instant instant, String reason)) {
System.out.println("User deleted at " + instant + " with username " + user.username() + " because " + reason);
return Optional of(user);
}
return Optional.empty();
}
이 코드에서 UserCreatedEvent(User user, Instant instant) 및 UserDeleteedEvent(User user, Instant, String reason)는 각 이벤트의 사용자, 인스턴트 및 이유 속성에 직접 액세스할 수 있는 레코드 패턴입니다. 이 접근 방식은 더 간결하며 유형 안전한 방식으로 데이터를 처리할 수 있습니다.
JEP 441: 스위치 식과 문을 위한 패턴 매칭
JEP 440은 레코드 패턴을 개선하는 데 중점을 두지만 JEP 441은 패턴 매칭 기능을 확장하여 수식과 문을 전환합니다. 이러한 맥락에서 패턴 매칭은 복잡한 데이터 지향 쿼리를 간결하고 안전하게 처리할 수 있습니다.
스위치 식과 패턴 일치
fireEvent 메서드는 스위치 식을 위한 패턴 매칭을 효과적으로 사용할 수 있는 방법을 보여줍니다:
String fireEvent(Supplier<User> supplier) {
return switch (supplier){
case UserCreatedEvent(var user, var instant) -> "User created at " + instant + " with username " + user.username();
case UserDeletedEvent(var user, var instant, var reason) -> "User delete at " + instant +
" with username " + user.username() + " because " + reason;
default -> "No event";
};
}
이 코드는 스위치 표현식에서 패턴 매칭을 보여줍니다. 스위치 표현식의 각 경우는 패턴과 해당 동작을 지정합니다. 패턴은 공급자 객체를 재구성하고 사용자 이벤트 레코드의 속성에 직접 액세스할 수 있게 해줍니다. 이 방법은 코드의 가독성과 유지보수성을 향상시켜 복잡한 데이터 구조를 쉽게 작업할 수 있게 해줍니다.
더 자세히 알아보기
이 문서에서 논의된 개념과 코드 샘플에 대해 자세히 알아보려면 다음 링크인 Java 21 Code Sample에 있는 GitHub 저장소를 방문하십시오.
데이터 지향 프로그래밍 수용
자바 21과 JEP 440 및 441의 도입으로 자바의 데이터 지향 프로그래밍은 새로운 수준의 정교함에 도달했습니다. 이러한 기능들은 개발자들이 코드 명료성, 안전성 및 유지 관리성을 향상시키면서 데이터를 더 효과적으로 작업할 수 있도록 해줍니다.
데이터가 소프트웨어 개발의 핵심인 세상에서 자바 21에서 이러한 데이터 지향 프로그래밍 기능을 마스터하는 것은 업계 선두를 유지하는 데 필수적입니다. JEP 440과 JEP 441은 광범위한 데이터 처리가 필요한 애플리케이션을 구축하거나 단순히 더 깨끗하고 읽기 쉬운 코드를 위해 노력하는 경우에도 자바 개발자라면 누구나 툴킷에 추가해야 할 도구입니다.
자바 21에서 레코드 패턴과 패턴 매칭의 힘을 수용하여 자바 애플리케이션의 잠재력을 최대한 활용할 수 있습니다. 이는 보다 우아하고 효율적인 데이터 지향 프로그래밍을 위한 단계로, 코드베이스를 보다 강력하고 관리하기 쉽게 만듭니다. 자바 21은 자바 개발에서 보다 밝고 데이터 중심적인 미래를 위한 발판을 마련합니다.
'SW > Java' 카테고리의 다른 글
Java 21, Java의 주요 단계: Non-blocking IO 및 업그레이드된 ZGC (0) | 2024.01.06 |
---|---|
Java 17의 흥미로운 새로운 기능 예를 들어 보기 (0) | 2024.01.03 |
Java 배압(Backpressure) : 개념, 실제 사례, 구현 (0) | 2023.12.20 |
올바른 Java 예외 처리 (0) | 2023.12.16 |
잠금 해제 성능: Java 21 가상 스레드 탐색 (0) | 2023.12.15 |