Record 객체

June·2024년 11월 4일
0

Java Record 객체란?

Java의 Record 객체는 간결하고 불변적인 데이터 저장 구조를 만들기 위해 Java 14에 도입된 기능입니다. 데이터 필드, 생성자, getter 메서드, toString, equals, hashCode 같은 보일러플레이트 코드를 자동으로 생성하여 코드 작성의 간결함과 가독성을 높여줍니다. Record는 데이터 전달에 최적화된 객체로서, 주로 데이터를 전달하는 용도로 매우 유용합니다.

Record의 주요 특징

  1. 자동 생성 메서드:

    Record는 필드 선언 없이도 생성자, getter 메서드, toString, equals, hashCode 메서드를 자동으로 생성합니다. 이로 인해 불필요한 코드 작성을 줄일 수 있습니다.

  2. 불변성(Immutable):

    모든 Record 필드는 final로 선언되어 객체가 불변하게 됩니다. 객체가 생성된 후 필드 값을 변경할 수 없으므로, 데이터 무결성을 보장할 수 있습니다.

  3. 목적의 명확성:

    Record는 단순히 데이터를 전달하는 데 목적을 두고 설계되었으며, 이를 통해 데이터 중심 애플리케이션에서 간단하게 데이터 구조를 표현할 수 있습니다.

Record 사용 예시

아래 예시는 Customer 정보를 담는 간단한 Record 정의 예시입니다. 이를 통해, 데이터 필드만 지정하면 자동으로 필요한 메서드들이 제공됩니다.

public record Customer(int id, 
					   String name, 
                       String email) {
}

위와 같이 Customer 객체를 Record로 정의하면, 자동으로 다음과 같은 기능이 포함됩니다:

  • 생성자: new Customer(int id, String name, String email)
  • getter 메서드: customer.id(), customer.name(), customer.email()
  • toString(): Customer[id=..., name=..., email=...]
  • equals()hashCode() 메서드

Record와 불변 객체의 장점

불변 객체로서의 Record는 여러 애플리케이션 계층 간 안전하게 데이터를 전달하는 데 유용합니다. 특히 멀티스레드 환경에서 값이 수정되지 않음을 보장하여 데이터 안전성을 높이고, 예측 가능한 동작을 제공합니다.

Record의 DTO 활용

이러한 불변 객체의 장점을 바탕으로 Record는 DTO(Data Transfer Object)로서 주로 사용됩니다. DTO는 데이터 전달 용도로 사용되는 객체로, Record의 간결함과 불변성이 DTO가 요구하는 특성에 잘 맞아떨어집니다. 특히 API 응답 데이터로 Record를 활용하면 객체 정의를 간단하게 유지하면서 데이터의 불변성을 확보할 수 있습니다.

public record CustomerDTO(int id, 
						  String name, 
                          String email) {
}

Record가 DAO로 사용되지 않는 이유

DAO(Data Access Object)는 데이터베이스와의 직접적인 상호작용을 담당하는 객체입니다. 반면 Record는 불변 객체이기 때문에 데이터베이스에서 조회한 데이터를 변경하거나 CRUD 작업을 수행하는 데 적합하지 않습니다. 따라서 DAO는 Record 대신 인터페이스나 클래스 형태로 구현하여 데이터베이스 상호작용 로직을 포함해야 합니다.

결론

Java의 Record 객체는 간단하고 불변적인 데이터 저장 구조를 제공하여 보일러플레이트 코드를 줄이고, 데이터 전달을 명확하고 안전하게 처리할 수 있습니다. 따라서 단순한 데이터 전송 객체로 DTO 활용에 주로 사용됩니다. Record는 Java에서 데이터 중심 애플리케이션의 가독성과 유지보수성을 높이는 데 효과적인 선택 중 하나입니다. 그러나 무분별하게 사용하는 것은 오히려 코드의 가독성과 시나리오 이해를 방해할 수 있으므로, Record의 도입 여부는 상황에 맞는 신중한 판단이 필요합니다.

profile
😊

0개의 댓글