-
[Java] record 예약어Java 2025. 2. 13. 21:51
record 예약어
자바 14에서 처음 도입되고, 자바 16에서 정식 기능으로 추가된 예약어로, 불변 데이터 객체(immutable data objects)를 간편하게 선언할 수 있도록 지원하는 기능이다.
record의 특징
1. 자동으로 필드, 생성자(모든 필드 포함), Getter, equals(), hashCode(), toString() 제공
2. record의 필드는 상수 (final)
3. 일반적인 POJO 클래스와 비교했을 때 코드가 훨씬 간결함
4. Serializable을 구현하여 직렬화 가능
5. 상속 불가능
record 사용 예제
public record User(String name, int age) {}
public class RecordExample { public static void main(String[] args) { User kim = new User("kim", 20); User lee = new User("lee", 25); System.out.println("lee = " + lee); // lee = User[name=lee, age=25] System.out.println("lee.name() = " + lee.name()); // lee.name() = lee System.out.println("lee.age() = " + lee.age()); // lee.age() = 25 System.out.println(kim.equals(new User("kim", 20))); // true System.out.println("kim.equals(lee) = " + kim.equals(lee)); // kim.equals(lee) = false } }
위 record를 일반 클래스로 나타내면 아래와 같다. 이 코드를 record를 사용하면 단 한 줄로 바꿀 수 있다.
@Getter @EqualsAndHashCode @ToString(of = {"name", "age"}) @AllArgsConstructor public class User { private final String name; private final int age; }
record에 컴팩트 생성자와 일반 메서드도 선언 가능하다.
public record User(String name, int age) { // Compact constructor public User { if (age < 0) { throw new IllegalArgumentException("Age cannot be negative!"); } } public String greeting() { return "Hello, my name is " + name + " and I am " + age + " years old."; } }
이처럼 record를 사용하면 불변 객체를 정말 간편하게 정의할 수 있다. record는 주로 DTO, 불변 객체, 단순 데이터 저장용 클래스를 만들 때 사용된다. 하지만 record는 불변 객체이므로 필드 값을 변경해야 하는 경우에는 적합하지 않다. 또한, 상속을 지원하지 않으므로, 클래스를 확장해야 하는 경우에는 일반 클래스를 사용해야 한다.
'Java' 카테고리의 다른 글
[Java] 생산자-소비자 문제 (0) 2025.04.08 [Java] volatile 예약어 (1) 2025.02.18 [Java] 리플렉션(Reflection)에 대해서 (1) 2025.01.17 [Java] I/O 정리 (1) 2024.11.09 [Java] Charset과 문자 인코딩 (0) 2024.11.08