개발/Java

[Java] Java Record란? 불변 객체를 간단하게 만드는 방법 (예제 포함)

아현이라구 2025. 6. 30. 10:02
반응형

✅ Java Record란 무엇인가요?

Java Record는 Java 14에 미리보기(Preview) 기능으로 도입되었고, Java 16부터 정식 기능으로 포함된 불변(Immutable) 데이터 객체를 정의하는 문법입니다.

우리가 DTO나 VO 클래스를 만들 때는 보통 필드, 생성자, getter, equals, hashCode, toString까지 일일이 작성해야 했는데요,
record를 사용하면 단 한 줄로 모든 기능이 자동 생성됩니다.

 

🔧 기존 방식과 Record의 차이

 

일반 클래스 방식 예시

public class User {
    private final String name;
    private final int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String name() {
        return name;
    }

    public int age() {
        return age;
    }

    @Override
    public String toString() {
        return "User[name=" + name + ", age=" + age + "]";
    }

    // equals, hashCode 생략
}

✅ Record로 작성한 예시

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

보시는 것처럼, 단 한 줄로 동일한 기능을 갖는 클래스를 만들 수 있습니다.

 

⚙️ Record가 자동으로 생성하는 것들

record를 선언하면 다음과 같은 기능들이 자동으로 생성됩니다:

  • private final 필드
  • 생성자(Constructor)
  • 각 필드에 대한 getter (메서드 이름은 필드명과 동일: user.name())
  • toString(), equals(), hashCode() 오버라이드

 

🧪 사용 예제

public class Main {
    public static void main(String[] args) {
        User user = new User("아현", 28);
        System.out.println(user.name());  // → "아현"
        System.out.println(user);         // → User[name=아현, age=28]
    }
}

 

❗ 주의하실 점

  • Record는 불변 객체이기 때문에 한 번 생성된 이후 값을 변경할 수 없습니다.
  • 상속이 불가능합니다. 모든 record는 자동으로 final로 처리되기 때문입니다.
  • abstract 키워드나 mutable 필드가 필요한 경우에는 사용이 적절하지 않을 수 있습니다.

🛠 커스텀 로직도 추가할 수 있습니다

record는 생성자나 메서드 등을 추가할 수 있어, 복잡한 검증이나 추가 로직이 필요할 때도 유용합니다.

 

public record User(String name, int age) {
    public User {
        if (age < 0) {
            throw new IllegalArgumentException("나이는 0 이상이어야 합니다.");
        }
    }

    public String greeting() {
        return "안녕하세요, " + name + "입니다.";
    }
}

 

🎯 언제 Record를 사용하면 좋을까요?

사용하면 좋은 경우사용하지 않는 것이 좋은 경우

 

DTO, VO, API 응답 객체 JPA Entity, 값 변경이 필요한 객체
테스트용 데이터 객체 상속 구조가 필요한 클래스
 

📚 마무리하며

Java Record는 Java 개발자에게 매우 유용한 기능입니다.
특히 DTO나 간단한 응답 객체, 테스트용 모델을 만들 때 훨씬 적은 코드로 효율적으로 작성할 수 있습니다.
Java 16 이상을 사용 중이시라면, 꼭 한 번 Record를 도입해보시길 추천드립니다.

반응형