본문으로 건너뛰기

Record 빌더패턴

자바 17에서 record에 빌더패턴 적용하려면..

보통 빌더패턴 어노테이션 @Builder은
클래스 위에다가 붙혀주는데, record의 경우에는 특이하게 기본 생성자에 붙혀줘야한다.

잘못된 사용법

@Builder
public record Member(

Integer informationA,
Integer informationB,
Integer informationC,
Integer informationD,
Integer informationE
) {
}

해결법

public record Member(

Integer informationA,
Integer informationB,
Integer informationC,
Integer informationD,
Integer informationE
) {
@Builder
public Member {}
}

작성해서 확인해본 결과물..

public class RecordExercise {
public static void main(String[] args) {
ResultDto resultDto = ResultDto.builder()
.informationA(1)
.build();
System.out.println("informatinA에만 값을 입력하고 빌드 후 결과 확인");
System.out.println(resultDto);

ResultDto resultDto2 = ResultDto.builder()
.isErrorData(true)
.build();
System.out.println("isErrorData에만 값을 입력하고 빌드 후 결과 확인");
System.out.println(resultDto2);

List<ResultDetailDto> resultDetail = Arrays.asList(
ResultDetailDto.builder().detailInformationA(new BigDecimal("3.14")).detailInformationB(BigDecimal.ZERO).build(),
ResultDetailDto.builder().detailInformationA(new BigDecimal("1.11")).detailInformationB(BigDecimal.ONE).build()
);

ResultDto resultDto3 = ResultDto.builder()
.informationK(resultDetail)
.build();
System.out.println(resultDto3);
}

public record ResultDto(

Integer informationA,
Long informationB,
BigDecimal informationC,
Float informationD,
int informationE,
char informationF,
boolean isErrorData,
BigInteger informationH,
String informationI,
BigDecimal informationJ,
List<ResultDetailDto> informationK
) {
@Builder
public ResultDto {}
}

public record ResultDetailDto(
BigDecimal detailInformationA,
BigDecimal detailInformationB
) {
@Builder
public ResultDetailDto {}
}
}
informatinA에만 값을 입력하고 빌드 후 결과 확인
ResultDto[informationA=1, informationB=null, informationC=null, informationD=null, informationE=0, informationF= , isErrorData=false, informationH=null, informationI=null, informationJ=null, informationK=null]
isErrorData에만 값을 입력하고 빌드 후 결과 확인
ResultDto[informationA=null, informationB=null, informationC=null, informationD=null, informationE=0, informationF= , isErrorData=true, informationH=null, informationI=null, informationJ=null, informationK=null]
informationK에만 값을 입력하고 빌드 후 결과 확인
ResultDto[informationA=null, informationB=null, informationC=null, informationD=null, informationE=0, informationF= , isErrorData=false, informationH=null, informationI=null, informationJ=null, informationK=[ResultDetailDto[detailInformationA=3.14, detailInformationB=0], ResultDetailDto[detailInformationA=1.11, detailInformationB=1]]]