record

2023. 6. 4. 20:09Java

Java에서 record는 Java 14에서 미리보기 기능으로 도입되었고, Java 16에서 정식으로 추가된 기능입니다. record는 불변(immutable) 데이터 클래스의 간단한 구현을 제공하는 새로운 타입입니다. 주로 데이터 전송 객체(DTO)나 값을 캡슐화하는 데 사용됩니다.

record의 특징

  1. 불변성:
    • record로 정의된 클래스의 필드는 기본적으로 final로 선언되어, 객체 생성 후 수정할 수 없습니다.
  2. 간단한 문법:
    • record는 생성자, getter, equals(), hashCode(), toString() 메서드를 자동으로 생성합니다. 이를 통해 보일러플레이트 코드를 줄이고 코드의 가독성을 높입니다.
  3. 자동 생성되는 메서드:
    • record는 생성할 때 전달된 필드를 기반으로 다음과 같은 메서드를 자동으로 생성합니다:
      • public String firstname()public String lastname() 같은 접근자 메서드.
      • public boolean equals(Object obj)public int hashCode().
      • public String toString() 메서드가 자동으로 생성됩니다.

예시

아래는 NamesOnlyDTO를 정의한 예시입니다:

public record NamesOnlyDTO(String firstname, String lastname) {}

이 코드로 인해 Java는 다음과 같은 메서드를 자동으로 생성합니다:

  • 생성자:
  • public NamesOnlyDTO(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; }
  • 접근자 메서드:
  • public String firstname() { return this.firstname; } public String lastname() { return this.lastname; }
  • equals()hashCode():
  • @Override public boolean equals(Object o) { // ... } @Override public int hashCode() { // ... }
  • toString():
  • @Override public String toString() { return "NamesOnlyDTO[firstname=" + firstname + ", lastname=" + lastname + "]"; }

사용 예시

record를 사용하면 다음과 같이 쉽게 객체를 생성하고 사용할 수 있습니다:

NamesOnlyDTO person = new NamesOnlyDTO("John", "Doe");
System.out.println(person.firstname()); // "John"
System.out.println(person.lastname());  // "Doe"
System.out.println(person); // "NamesOnlyDTO[firstname=John, lastname=Doe]"

 

record는 Java에서 간단하고 명확하게 데이터를 표현할 수 있는 강력한 방법을 제공하며, 불변성을 통해 더 안전한 코드를 작성할 수 있도록 도와줍니다. DTO와 같은 데이터 중심의 객체를 정의할 때 유용하게 사용될 수 있습니다.

'Java' 카테고리의 다른 글

Callable & ExecutorService  (0) 2023.06.23
Cloneable 인터페이스(06/12)  (0) 2023.06.06
Stream.reduce  (0) 2023.06.06
native 키워드  (0) 2023.06.06
Lesson: Classes and Objects 4  (0) 2023.06.04