Java 14에서 도입된 record 키워드는 간결한 데이터 구조를 정의하는 새로운 방식입니다. 기존의 class를 사용한 데이터 객체보다 더 적은 코드로 불변(immutable) 객체를 생성할 수 있도록 설계되었습니다. record는 DTO(Data Transfer Object), 불변 객체, 데이터 모델링 등에 매우 유용하게 사용할 수 있습니다.
1. Java record란?
record는 자동으로 생성된 생성자, getter 메서드, equals(), hashCode(), toString()을 포함하는 데이터 중심 클래스입니다. 이는 불변 객체를 간단하게 정의할 수 있도록 돕습니다.
기본 문법
public record User(String name, int age) {}
위 코드 한 줄만으로 다음과 같은 기능을 자동으로 제공합니다:
- name과 age를 초기화하는 생성자
- name()과 age() 메서드를 통한 필드 접근 (getName(), getAge() 대신 사용)
- equals(), hashCode(), toString() 자동 생성
기존 클래스 방식과 비교
class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
@Override
public boolean equals(Object obj) { /* equals() 구현 */ }
@Override
public int hashCode() { /* hashCode() 구현 */ }
@Override
public String toString() { /* toString() 구현 */ }
}
위 코드와 동일한 기능을 record는 한 줄로 대체할 수 있습니다.
2. record를 DTO로 사용하는 방법
DTO(Data Transfer Object)는 계층 간 데이터 전달을 위해 사용하는 객체이며, 일반적으로 불변성을 유지해야 합니다. record는 불변 객체를 자동으로 생성하므로 DTO에 적합합니다.
DTO로 활용하는 예제
public record UserDTO(String name, int age) {}
컨트롤러에서 DTO 활용 예제 (Spring Boot)
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public UserDTO getUser(@PathVariable Long id) {
return new UserDTO("Alice", 25);
}
}
DTO를 기존 클래스 방식으로 사용한 경우
public class UserDTO {
private final String name;
private final int age;
public UserDTO(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
✅ record를 사용하면 DTO를 보다 간결하고 유지보수하기 쉽게 만들 수 있습니다.
3. record 사용이 적합한 경우
- DTO (Data Transfer Object)
- VO (Value Object, 값 객체)
- 불변 데이터 모델링
- 간결한 데이터 저장 구조
✅ record를 사용하면 DTO 클래스를 간편하게 정의할 수 있으며, 데이터의 불변성을 보장하는 이점이 있습니다.
4. 마무리
- record는 간결한 불변 데이터 객체를 만들기 위한 새로운 Java 기능으로, DTO로 사용하기 적합합니다.
- 기존 클래스 대비 코드 양이 줄어들고 가독성이 향상됩니다.
- DTO를 구현할 때 record를 사용하면 불필요한 보일러플레이트 코드 없이 깔끔하게 유지보수할 수 있습니다.
'java' 카테고리의 다른 글
| Tree 에 관하여 (1) | 2025.02.20 |
|---|---|
| Map 에 관하여 (1) | 2025.02.18 |
| Set 에 관하여 (0) | 2025.02.11 |
| List 에 관하여 (0) | 2025.02.10 |
| DTO, VO, DAO 에 관하여 (0) | 2025.02.06 |