Java 레코드의 도입으로 개발자에게는 데이터 객체의 처리 및 생성을 단순화하는 새로운 데이터 구조가 제공되었습니다. 최근 레코드 패턴과 중첩 패턴이 추가되면서 레코드 처리가 더욱 효율적이고 역동적으로 되었습니다.
기본부터 검토해 보겠습니다. 레코드는 기본 제공 접근자 메서드를 사용하여 데이터에 대한 투명한 전달자 역할을 하는 기존 클래스에 대한 가벼운 대안입니다. 주요 목적은 복잡한 동작을 구현하기보다는 데이터를 보관하는 것입니다.
그러나 Java 21에 레코드 패턴이 도입되면서 기존의 인스턴스 및 캐스트 관용어가 단순화되었습니다. 객체가 특정 레코드 클래스의 인스턴스인지 확인한 다음 해당 구성 요소를 사용하도록 캐스팅하는 대신 이제 레코드 패턴을 사용하여 두 단계를 결합할 수 있습니다. 예를 들어, 다음과 같이 작성하는 대신:
if (obj instanceof String) { String name = (String)obj; ... use name ... } In Java 21, we can simply write: if (obj instanceof String name) { ... use name ... }
이렇게 하면 유형 패턴 String s가 obj 값과 일치하고 패턴 변수 s를 String으로 캐스팅된 obj 값으로 초기화하는 데 사용되므로 코드가 더 간결해지고 오류가 덜 발생합니다.
또한 Java 21에서는 중첩 패턴을 도입하여 중첩 레코드와 같은 보다 복잡한 객체 그래프의 일치 및 분해를 허용합니다. 다음과 같은 선언이 있다고 가정해 보겠습니다.
Record BankAccount(String accountNumber, String accountHolder, double balance) {} Record Transaction(String transactionId, double amount, String type, String timestamp) {} Record BankStatement(Listtransactions, BankAccount account) {}
이제 중첩된 레코드 패턴을 사용하여 다음과 같이 BankStatement 개체에서 총 거래 금액을 계산할 수 있습니다.
static double calculateTotalTransactions(BankStatement statement) { if (statement instanceof BankStatement(Listtransactions, BankAccount account)) { double total = 0; for (Transaction t : transactions) { total = t.amount; } return total; } return 0; }
이 예에서 외부 패턴 BankStatement(거래 목록, BankAccount 계정)에는 BankStatement 레코드에서 계정 구성 요소를 추출하는 데 사용되는 중첩 패턴 BankAccount 계정이 포함되어 있습니다. 이를 통해 각 개별 하위 패턴 일치를 개별적으로 처리할 필요가 없으므로 보다 간결하고 효율적인 코드가 가능해집니다.
레코드 패턴의 또 다른 유용한 기능은 유형 추론입니다. 레코드 패턴이 형식 인수를 제공하지 않고 일반 레코드 클래스의 이름을 지정하면 컴파일러는 패턴이 사용될 때 자동으로 형식 인수를 유추합니다. 이는 다음 예제와 같이 코드를 단순화합니다.
record MyBankAccount(L limitFactor, M money){}; static void recordInference(MyBankAccount bankaccount){ switch(bankaccount){ case MyBankAccount(var moneylimit, var amount) -> System.out.println("Messages: Inferred that account has balance " amount " with a limit of " moneylimit); case MyBankAccount(var moneylimit, null)-> System.out.println("Messages: Inferred that account has a balance of zero with a limit of " moneylimit); ... } }
이 기능은 중첩된 레코드 패턴에서도 지원되므로 코드가 더욱 간결해지고 가독성이 높아집니다.
마지막으로 레코드 패턴은 Java 21의 스위치 표현식 및 명령문과 완전히 통합됩니다. 그러나 스위치 명령문에서 레코드 패턴을 사용할 때 스위치 블록은 완전해야 한다는 점에 유의하는 것이 중요합니다. 이는 선택기 표현식의 가능한 모든 값이 스위치 블록에서 고려되어야 함을 의미합니다. 레코드 패턴의 경우 사용된 패턴 유형을 분석하여 이를 결정합니다. 예를 들어 케이스 레이블 Case Bar b는 Bar 유형의 값 및 Bar의 가능한 모든 하위 유형과 일치합니다.
결론적으로 Java 21의 기록 패턴을 이해하고 마스터하는 것은 Java SE 21 개발자 인증을 준비하는 모든 사람에게 중요합니다. 이러한 새로운 기능을 통해 레코드 처리를 더욱 간소화하고 효율적으로 수행할 수 있어 Java 개발자에게 필수적인 기술이 되었습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3