"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java 레코드 패턴 및 패턴 일치 탐색

Java 레코드 패턴 및 패턴 일치 탐색

2024-08-23에 게시됨
검색:838

Exploring Java Record Patterns and Pattern Matching

Java 레코드 패턴은 Project Amber의 일부로 Java 16에서 도입되었으며 분해자 및 패턴 일치가 추가되어 Java 21에서 향상되었습니다. 이 기능을 사용하면 Java 애플리케이션에서 데이터를 보다 간결하고 유연하게 처리할 수 있습니다. 이 튜토리얼에서는 레코드 패턴의 개념과 패턴 매칭에 어떻게 도움이 되는지, 다양한 코딩 예제를 다룰 것입니다.

1. Java 레코드의 빠른 요약
레코드 패턴을 살펴보기 전에 Java 레코드를 빠르게 요약해 보겠습니다. 레코드는 불변 데이터를 보관하기 위해 특별히 설계된 새로운 유형의 클래스로 Java 14에 도입되었습니다. 데이터로 클래스를 정의하기 위해 보다 간결한 구문을 제공함으로써 상용구 코드를 작성할 필요가 없습니다. 다음 예에서는 이름, 성, 나이의 세 가지 필드가 있는 "Person"이라는 레코드를 정의합니다.

record Person(String firstName, String lastName, int age) {}

기록은 불변이므로 특정 특성을 제한합니다.

  • 모든 필드가 최종 입력됩니다.
  • 클래스는 암시적으로 최종입니다.
  • 인스턴스 필드 선언은 금지됩니다.

레코드는 각 필드에 대한 생성자와 getter 메서드를 자동으로 생성하므로 기존 클래스보다 데이터 매체에 더 적합합니다.

2. 녹음 패턴이란 무엇입니까?
Java 21에 도입된 레코드 패턴은 레코드에서 값을 쉽게 분해하고 추출할 수 있는 레코드와 패턴 개념을 결합합니다. 레코드 패턴은 테스트가 성공한 경우에만 대상 레코드에서 추출된 값이 할당되는 레코드 클래스 유형과 선택적 패턴 변수로 구성됩니다.

null 값은 어떤 레코드 패턴과도 일치하지 않으므로 이 경우 패턴 변수가 초기화되지 않습니다.

3. 레코드 소멸자
소멸자는 생성자의 반대입니다. 값을 추가하는 대신 객체에서 값을 추출합니다. 레코드의 맥락에서 소멸자는 "해체자"라고 합니다. 이를 통해 레코드 값을 개별 구성 요소로 분해할 수 있습니다. 다음 필드가 포함된 "Name"이라는 레코드가 있다고 가정합니다.

고객 기록(문자열 firstName, 문자열 lastName, int age) {}

다음 예와 같이 분해자를 사용하여 "고객" 레코드의 인스턴스에서 이러한 필드의 값을 추출할 수 있습니다.

고객 고객 = 신규 고객("Jane", "Smith", 30);

if (고객 인스턴스of Customer(String firstName, String lastName, int age)) {
System.out.println("이름: " firstName); // 제인
System.out.println("성: " lastName); // 스미스
System.out.println("나이: " age); // 30
}

레코드 구조는 여러 관련 값을 단일 개체로 저장하고 검색해야 하는 상황에서 유용할 수 있습니다. 레코드의 해체 기능을 사용하면 코드에서 해당 값을 쉽게 추출하고 사용할 수 있습니다.

4. Switch 문에 패턴 기록
Java 16에서는 instanceof 문에 대한 패턴 일치를 도입했으며, 이는 Java 21에서 switch 문을 포함하도록 더욱 확장되었습니다. 여러 패턴을 처리하면서 코드를 더욱 간결하고 읽기 쉽게 만들 수 있습니다.

"SavingAccount", "CreditCardAccount" 및 "HomeLoanAccount"라는 세 가지 하위 유형이 있는 "Account"라는 레코드가 있다고 가정해 보겠습니다. 각 하위 유형에는 균형을 계산하는 방법이 다릅니다. 아래와 같이 switch 문의 레코드 패턴을 사용하여 이러한 세 가지 경우를 처리할 수 있습니다.

인터페이스 계정 {}
SavingAccount 기록(이중 잔액)은 계정을 구현합니다. {}
Record CreditCardAccount(double CreditLimit, double Used)는 계정을 구현합니다. {}
HomeLoanAccount(double totalAmount, double amountPaid) 기록은 계정을 구현합니다. {}

계정 계정= 새 CreditCardAccount(10000, 1000);

스위치(모양) {
사례 SavingAccount s:
System.out.println("계정 잔액은 " 잔액입니다);
부서지다;
케이스 CreditCard계정 c:
System.out.println("신용 잔액: " (creditLimit-used));
부서지다;
사례 HomeLoan계좌 h:
System.out.println("Balance " (totalAmount-amountPaid));
부서지다;
기본:
System.out.println("알 수 없는 계정");
}

5. 중첩 패턴
단일 레코드에서 값을 추출하는 것 외에도 레코드 패턴을 중첩하여 더 복잡한 레코드를 처리할 수도 있습니다. "Customer" 유형의 필드와 "Address" 유형의 다른 필드가 있는 "Account"라는 레코드가 있다고 가정해 보겠습니다. 다음 예와 같이 중첩된 레코드 패턴을 사용하여 두 필드 모두에서 값을 추출할 수 있습니다.

고객 기록(문자열 firstName, 문자열 lastName, int age) {}

기록 계정(고객 고객, 주소 주소) {}

고객 고객 = 신규 고객("John", "Doe", 25);
주소 주소 = new Address("123 Main St.","City", "State");
계정 계정 = 새 계정(고객, 주소);

if (계정 인스턴스of Account(고객(f이름, 이름, 나이), 주소(거리, 도시, 주))) {
System.out.println("이름: " fName); // 존
System.out.println("성: " lName); // 되세요
System.out.println("나이: " age); // 25
System.out.println("주소: " 거리 ", " 도시 ", " 주); // 123 Main St., 시, 주
}

이 예에서는 두 개의 중첩 패턴을 사용하여 "계정" 레코드의 "고객" 및 "주소" 필드에서 값을 추출합니다.

6. 구성 요소 일치
레코드 패턴을 사용하면 패턴 변수가 레코드의 구성 요소 이름과 일치할 필요가 없으므로 더 많은 유연성을 얻을 수 있습니다. 호환되는 한 패턴 일치는 성공합니다. 예를 들어:

기록 고객(문자열 firstName, 문자열 lastName, int age) {}

기록 계정(고객 고객, 주소 주소) {}

고객 고객 = 신규 고객("John", "Doe", 25);

if (고객 인스턴스of 고객(var fn, var ln, var age)) {
System.out.println("이름: " fn); // 존
System.out.println("성: " ln); // 되세요
System.out.println("나이: " age); // 25
}

// 중첩된 레코드 구성 요소에 액세스
계정 계정 = new Account(고객, 새 주소("123 Main St", "New York", "NY"));
if (계정 인스턴스of Account(var cust, var 주소)) {
System.out.println("고객: " 고객); // 고객[firstName=John, lastName=Doe, age=25]
System.out.println("주소: " address); // 주소[street=123 Main St, city=New York, state=NY]
}

여기서 패턴 변수 "fn" 및 "ln"은 "Customer" 레코드의 "fName" 및 "lName"에 해당하는 구성 요소 이름과 다릅니다. 이는 레코드 패턴을 더욱 유연하게 만들고 변수 이름과의 잠재적인 충돌을 방지합니다.

7. 결론
결론적으로, Java 레코드 패턴은 레코드를 분해하고 레코드에서 값을 추출하는 편리한 방법을 제공합니다. 인스턴스 오브 및 스위치 문에서 패턴 일치를 처리하는 동안 코드를 더 간결하고 명확하며 읽기 쉽게 만듭니다. 레코드 소멸자와 결합된 레코드 패턴을 사용하면 복잡한 레코드를 더욱 강력하게 처리할 수 있습니다. 전반적으로 이 기능은 데이터 매체로서 레코드의 사용을 향상시키고 Java 프로그래밍을 더욱 즐겁게 만듭니다.

개발자는 MyExamCloud의 1Z0-830 연습 시험을 사용하여 SE 21 Developer Certified Professional 시험을 공부함으로써 더 많은 Java 21 기능을 발견할 수 있습니다.

릴리스 선언문 이 기사는 https://dev.to/myexamcloud/exploring-java-record-patterns-and-pattern-matching-3g8l?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]에 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3