nhkiiim / TIL

Today I Learned
https://github.com/nhkiiim/TIL/discussions
1 stars 0 forks source link

상속 관계에서 @Builder 사용하기 - @SuperBuilder #196

Open nhkiiim opened 1 year ago

nhkiiim commented 1 year ago

Dto에서 BaseDto를 extends 한 상황에서, @Builder를 사용해 빌더 패턴으로 BaseDto의 필드 설정 시 컴파일 오류 발생

BaseDto (부모클래스)


@Data
public class BaseDto {
private Long seq;
private Long size;
...

}

> Dto
```java
@Data
@Builder
@EqualsAndHashCode(callSuper = true)
public class Dto extends BaseDto {

    private List<...> dtoList;
    ...

}
return Dto.builder()
  .dtoList(mapper.select(...))
  .seq(...) // 오류 발생 !!
  .build();
nhkiiim commented 1 year ago

해결 방법 1

필드 기반 생성자로 빌더 패턴 적용 후 부모 클래스 생성자 호출로 해결

https://www.baeldung.com/lombok-builder-inheritance

@Data
@AllArgsConstructor
public class BaseDto {
private Long seq;
private Long size;
}

@Data
public class Dto extends BaseDto {
private List<...> dtoList;

@Builder
public Dto(Long seq, Long size, List<...> dtoList) {
    super(seq, size);
    this.dtoList= dtoList;
}

}

nhkiiim commented 1 year ago

해결 방법 2

@SuperBuilder 사용으로 간단하게 해결

https://projectlombok.org/features/experimental/SuperBuilder

@Data
@SuperBuilder
public class BaseDto {
     private Long seq;
     private Long size;
}
@Data
@Builder
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
public class Dto extends BaseDto {

    private List<...> dtoList;
    ...

}