java

record 에 관하여

heejunp 2025. 2. 21. 22:16

Java 14에서 도입된 record 키워드는 간결한 데이터 구조를 정의하는 새로운 방식입니다. 기존의 class를 사용한 데이터 객체보다 더 적은 코드로 불변(immutable) 객체를 생성할 수 있도록 설계되었습니다. recordDTO(Data Transfer Object), 불변 객체, 데이터 모델링 등에 매우 유용하게 사용할 수 있습니다.


1. Java record란?

record자동으로 생성된 생성자, getter 메서드, equals(), hashCode(), toString()을 포함하는 데이터 중심 클래스입니다. 이는 불변 객체를 간단하게 정의할 수 있도록 돕습니다.

기본 문법

public record User(String name, int age) {}

위 코드 한 줄만으로 다음과 같은 기능을 자동으로 제공합니다:

  • nameage를 초기화하는 생성자
  • 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를 사용하면 불필요한 보일러플레이트 코드 없이 깔끔하게 유지보수할 수 있습니다.