Record
Record는 값의 집합으로 이루어진 간단한 객체를 심플하게 개발하기 위해 고안됨. immutable data(불변 데이터)를 다루는 클래스 구현에 최적화되어 있음. 웹서비스 구현에서 많이 사용되는 DTO 개념에 적용하면 유용함.
주요 특징
- final 클래스: 다른 클래스를 상속하거나 상속시킬 수 없음
- 자동 생성 accessor 함수: 인스턴스 멤버 변수의 이름과 동일함
- 접근제어자: 클래스의 접근제어자는 public, package-private만 가능. 생성자의 접근제어자는 클래스의 접근제어자보다 제한된 수준이어서는 안됨
장점
- 반복 작업 불필요: 생성자, accessor(getter), equals(), hashCode(), toString() 등 반복적인 작업을 자동으로 처리함
- 명시적 용도 표현: "이 클래스는 data carrier 용도"임을 명시적으로 나타내어 코드 이해를 돕고, 해당 클래스의 목적에 맞지 않는 구현을 방지함
DTO 클래스에 Record가 적합한 이유
- 데이터 전달: 데이터를 한쪽에서 다른 한쪽으로 전달하는 데 사용되는 데이터 전송 객체(DTO)에 적합함
- 효율성: 불필요한 데이터를 제거하여 대역폭 사용량을 줄임
- 캡슐화: 세부 구현을 노출시키지 않음
- 불변성: 변경되지 않는 API 설계를 지원함
기존 구현 방식의 문제점
- 게터(getter), equals(), hashCode(), toString() 같은 반복적인 코드를 작성해야 했음
- 롬복이나 IDE의 도움을 받을 수 있었지만, 여전히 번거로운 작업이었음
Record 클래스를 사용하면 이러한 문제점을 해결할 수 있음.