Java의 Record
객체는 간결하고 불변적인 데이터 저장 구조를 만들기 위해 Java 14에 도입된 기능입니다. 데이터 필드, 생성자, getter
메서드, toString
, equals
, hashCode
같은 보일러플레이트 코드를 자동으로 생성하여 코드 작성의 간결함과 가독성을 높여줍니다. Record
는 데이터 전달에 최적화된 객체로서, 주로 데이터를 전달하는 용도로 매우 유용합니다.
자동 생성 메서드:
Record
는 필드 선언 없이도 생성자, getter
메서드, toString
, equals
, hashCode
메서드를 자동으로 생성합니다. 이로 인해 불필요한 코드 작성을 줄일 수 있습니다.
불변성(Immutable):
모든 Record
필드는 final
로 선언되어 객체가 불변하게 됩니다. 객체가 생성된 후 필드 값을 변경할 수 없으므로, 데이터 무결성을 보장할 수 있습니다.
목적의 명확성:
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
는 DTO(Data Transfer Object)로서 주로 사용됩니다. DTO는 데이터 전달 용도로 사용되는 객체로, Record
의 간결함과 불변성이 DTO가 요구하는 특성에 잘 맞아떨어집니다. 특히 API 응답 데이터로 Record
를 활용하면 객체 정의를 간단하게 유지하면서 데이터의 불변성을 확보할 수 있습니다.
public record CustomerDTO(int id,
String name,
String email) {
}
DAO(Data Access Object)는 데이터베이스와의 직접적인 상호작용을 담당하는 객체입니다. 반면 Record
는 불변 객체이기 때문에 데이터베이스에서 조회한 데이터를 변경하거나 CRUD 작업을 수행하는 데 적합하지 않습니다. 따라서 DAO는 Record
대신 인터페이스나 클래스 형태로 구현하여 데이터베이스 상호작용 로직을 포함해야 합니다.
Java의 Record
객체는 간단하고 불변적인 데이터 저장 구조를 제공하여 보일러플레이트 코드를 줄이고, 데이터 전달을 명확하고 안전하게 처리할 수 있습니다. 따라서 단순한 데이터 전송 객체로 DTO 활용에 주로 사용됩니다. Record
는 Java에서 데이터 중심 애플리케이션의 가독성과 유지보수성을 높이는 데 효과적인 선택 중 하나입니다. 그러나 무분별하게 사용하는 것은 오히려 코드의 가독성과 시나리오 이해를 방해할 수 있으므로, Record
의 도입 여부는 상황에 맞는 신중한 판단이 필요합니다.