모든 Java 개발자가 알아야 할 Java의 패턴 일치 및 기록 변경 사항

王林
풀어 주다: 2024-08-12 06:47:32
원래의
668명이 탐색했습니다.

Pattern Matching and Records Changes in Java  Every Java Developer Must Know

Java 16이 출시되면서 레코드(JEP 395)가 도입되면서 주요 개선 사항이 도입되었습니다. 이를 통해 주로 사용되는 클래스를 더 간단하고 간결하게 선언할 수 있습니다. 데이터를 운반하기 위해. 이 개선 사항은 이제 패턴 일치 및 레코드(JEP 406)가 추가되어 Java 21에서 더욱 향상되었습니다. 이 새로운 기능을 사용하면 패턴 일치를 사용하여 값이 Record 클래스의 인스턴스인지 테스트하고 해당 구성 요소를 보다 간소화된 방식으로 추출할 수 있습니다. 이 기사에서는 Java 21의 패턴 일치 및 레코드로 인한 변화와 이것이 Java 개발자에게 어떤 이점을 줄 수 있는지 살펴보겠습니다.

데이터의 투명한 전달자로서의 기록
Java 16에 도입된 레코드는 주로 데이터를 저장하고 전달하는 데 사용되는 클래스입니다. 이는 투명한 전달자입니다. 즉, 주요 목적은 데이터를 보유하는 것이며 생성자, 메소드, equals/hashCode 메소드와 같은 기타 모든 기능은 레코드에 정의된 데이터 필드를 기반으로 컴파일러에 의해 자동으로 생성됩니다. 따라서 데이터를 직렬화하거나 네트워크를 통해 전송해야 하는 시나리오에 사용하기에 이상적입니다.

두 개의 X 및 Y 좌표를 정의하는 Line 클래스의 예를 생각해 보세요.

레코드 Line(int x, int y) {}

이 클래스를 사용하려면 간단히 Line 클래스의 인스턴스를 만들고 내장된 구성 요소 접근자 메서드인 x() 및 y()를 사용하여 해당 데이터 필드에 액세스하면 됩니다.

라인 line = new Line(0, 10);
int x = line.x();
int y = line.y();
System.out.println("X: " + x + ", Y: " + y); // 출력: X: 0, Y: 10

기록과 패턴 매칭
Java 21에는 값이 Record 클래스의 인스턴스인지 테스트하고 해당 구성 요소를 보다 간소화된 방식으로 추출할 수 있는 패턴 일치가 추가되었습니다. 이 기능은 레코드를 광범위하게 사용하는 대규모 코드베이스를 처리할 때 특히 유용합니다.

객체가 Line 클래스의 인스턴스인지 테스트하고 해당 구성 요소를 추출하려는 다음 예를 고려하십시오.

정적 보이드 길이(객체 obj) {
if (obj 인스턴스of 라인 l) {
int x = l.x();
int y = l.y();
System.out.println(y-x);
}
}
보시다시피, 우리는 객체가 Point의 인스턴스인지 여부를 테스트하기 위해 유형 패턴을 사용했으며, 그렇다면 내장된 구성 요소 접근자 메서드를 호출하여 해당 구성 요소를 추출했습니다. 이 코드는 작동하지만 Java 21의 레코드 패턴을 사용하면 더욱 단순화될 수 있습니다.

레코드 패턴을 사용하면 값이 Record 클래스의 인스턴스인지 테스트할 수 있을 뿐만 아니라 한 줄의 코드로 해당 구성 요소를 추출할 수도 있습니다. 이는 추출된 구성 요소에 대한 지역 변수 선언을 패턴 자체로 끌어 올리고 값이 패턴과 일치할 때 접근자 메서드를 호출하여 해당 변수를 초기화함으로써 달성됩니다.

레코드 패턴을 사용하는 다음 코드를 고려하세요.

정적 보이드 길이(객체 obj) {
if (obj 인스턴스of Line(int x, int y)) {
System.out.println(y-x);
}
}
이 코드는 훨씬 더 간결하고 읽기 쉽습니다. 데이터를 가져오기 위해 새 객체를 생성하고 해당 구성 요소 접근자 메서드를 호출할 필요가 없어졌습니다. 레코드 패턴은 구성 요소를 직접 추출하고 초기화하여 코드를 더욱 간소화합니다.

중첩 레코드 패턴
개발자가 직면한 주요 과제 중 하나는 복잡한 개체 그래프를 처리하고 그 그래프에서 데이터를 추출하는 것입니다. 패턴 일치의 진정한 힘이 발휘되는 곳은 패턴 일치를 통해 우아하게 크기를 조정하고 더 복잡한 개체 그래프를 일치시킬 수 있다는 것입니다.

직원, 부서(열거형) 및 회사(레코드) 클래스를 고려해보세요. 레코드 패턴을 사용하여 Company 개체에서 직원의 부서를 추출할 수 있습니다.

// Java 21부터
static void printEmployeeDepartment(회사 c, 문자열 이름) {
if (c 인스턴스of회사(부서, 목록 직원)) {
for (직원 e : 직원) {
if (e.getName().equals(이름)) {
System.out.println(name + "는 " + dept + " 부서에 있습니다.");
반품;
}
}
}
System.out.println(name + " 찾을 수 없습니다.");
}
이 예에서는 중첩 패턴을 사용하여 Company 개체에서 직원의 부서를 추출합니다. 주어진 Company 객체에 부서와 직원 목록이 있는지 확인한 다음 목록을 반복하여 주어진 이름을 가진 직원을 찾습니다. 직원이 발견되면 해당 부서를 인쇄합니다. 그렇지 않은 경우 해당 직원을 찾을 수 없다는 메시지를 인쇄합니다.

중첩 패턴은 여러 값을 한 번에 일치시키고 분해하려는 상황에서도 사용할 수 있습니다. 주어진 좌표가 직사각형 내부에 있는지 확인하려는 다음 예를 고려하십시오.

//Java 21 기준
Point(double x, double y) 기록 {}

Rectangle(Point upperLeft, Point lowerRight) 기록 {}

// 주어진 점이 주어진 직사각형 안에 있는지 확인
static boolean isPointInsideRectangle(Point p, Rectangle r) {
if (r 인스턴스of Rectangle(Point(var x1, var y1), Point(var x2, var y2))) {
if (p.x() > x1 && p.y() > y1 && p.x() < x2 && p.y() < y2) {
true를 반환합니다.
}
}
false를 반환합니다.
}

이 예에서는 중첩 패턴을 사용하여 주어진 Point 객체가 주어진 Rectangle 객체의 경계 내에 속하는지 여부를 확인합니다. 중첩 패턴을 사용하면 여러 줄의 코드를 작성할 필요 없이 직사각형의 왼쪽 상단 및 오른쪽 하단 지점의 x 및 y 좌표에 액세스할 수 있습니다.

결론적으로 Java 21에 패턴 일치 및 레코드(JEP 406)가 추가되면서 복잡한 객체에서 데이터를 처리하고 추출하는 방법이 크게 향상되었습니다. 이 기능은 코드를 크게 단순화하고 읽기 쉽고 간결하게 만듭니다. 또한 패턴 일치가 실패할 수 있는 실패 시나리오를 처리하는 데도 도움이 됩니다. 이러한 변경을 통해 Java 21은 계속해서 코드를 더욱 간소화하고 Java 개발자를 위한 개발 환경을 개선합니다.

MyExamCloud의 Java SE 21 개발자 전문 연습 테스트를 통해 Java 21 기술을 업그레이드하세요. Java 21 전문가가 되기 위한 지식을 개발하고 테스트하세요.

위 내용은 모든 Java 개발자가 알아야 할 Java의 패턴 일치 및 기록 변경 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!