Java의 record 클래스는 모든 필드에 대한 값을 자동으로 관리합니다. 또한, 불변 객체를 생성하기 위한 구조를 제공해 줍니다.
record 클래스에서는 기본 생성자나 매개변수가 있는 생성자를 구현할 수 없습니다.
왜냐하면 불변성을 보장하기 설계된 클래스이기 때문이다.
- record는 불변 객체를 보장하기 위해 설계되었습니다. 모든 필드는 final로 정의되며, 생성자 외의 다른 초기화 방법을 제공하지 않도록 기본 생성자를 허용하지 않습니다.
- 기본 생성자는 매개변수 없이 객체를 생성합니다. 하지만 record의 특성상 모든 필드를 반드시 초기화해야 하므로 기본 생성자를 사용한 객체 생성은 논리적으로 불가능합니다.
- 기본적으로 모든 필드는 생성자 파라미터로 설정됩니다.
Compact constructor
Compact Constructor 생성자란 record에서 특별한 방식으로 생성자를 정의하는 방식으로, 모든 필드를 포함하는 생성자를 간결하게 작성할 수 있습니다.
주로, 객체 생성 시 초기화 작업이나 검증 내용을 작성할 때 사용합니다.
If you want your record's constructor to do more than initialize its private fields, you can define a custom constructor for the record. However, unlike a class constructor, a record constructor doesn't have a formal parameter list; this is called a compact constructor.
Record는 일반 클래스의 생성자와 다르게 생성자에 매개변수 리스트를 가지지 않는다.
compact constructor는 매개변수를 작성하지 않고 모든 필드를 받는 생성자를 만드는 생성자입니다.
특징
- 모든 필드 값을 암묵적으로 전달받는다.
- 컴파일러가 필드에 대한 초기화를 자동으로 처리해 줍니다.
- 추가 검증 및 초기화 로직을 작성할 수 있습니다.
code
public record User(String name, int age) {
// Compact Constructor
public User {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
}
}
compact constructor를 통해 값이 생성될 때에 검증 로직을 작성할 수 있습니다.
public User { ... } 형태로 작성할 로직을 블록 안에 작성합니다.
@QueryProjection 적용하기
import com.querydsl.core.annotations.QueryProjection;
public record UserDto(String name, int age) {
@QueryProjection
public UserDto {
// 필수 로직이 있다면 추가
}
}
querydsl에서 사용하는 @QueryProjecion 어노테이션은 모든 매개변수를 받는 생성자와 함께 작성되어야 합니다.
record class에 @QueryProjection을 적용하기 위해서는 컴팩트 생성자를 이용해 어노테이션을 작성하여 처리합니다.
'JAVA' 카테고리의 다른 글
Java string, stringbuilder를 이용해 문자열 합치기 (0) | 2024.11.23 |
---|---|
Java if문 최적화와 가독성 향상 방법 - 클린코드 작성 방법 (0) | 2024.11.12 |
[Java] Java Shutdown Hook 이란 - System.exit() (2) | 2024.09.25 |
[Java] 자바 predicate, consumer, supplier, function 이해하기 - 함수형 인터페이스 이해하기 (3) | 2024.09.22 |
[Java] 자바 추상화 설계 이해하기 - 추상 클래스와 인터페이스 활용 (0) | 2024.09.21 |