기록창고

@Lombok 생성자가 2개에 builder 적용하기 본문

JAVA

@Lombok 생성자가 2개에 builder 적용하기

방금시작한사람 2020. 6. 26. 14:42

 

한 객체를 만들 때, 두가지 이상 생성자가 있을 수 있다.

 

public class Something {
    int A;
    int B;
    int C;
    
    public Something() {}
    
    @Builder
    public Something(int A, int B, int C) {
    	this.A = A;
        this.B = B;
        this.C = C;
    }
    
    @Builder
    public Something(SomethingDto dto) {
    	this.A = dto.getA();
        this.B = dto.getB();
        this.C = dto.getC();
    }
    
}

 

이렇게 되면

Something something = Something.builder().build();

Intellij 기준 아래 A, B, C 에 대한 자동완성이 안생긴다 - dto 기준으로 만들어진다. (아마 맨 마지막 껄 가져오는듯)

 

Something something = Something.builder().A(A).B(B).C(C).build();

위의 코드를 작성 시 빨간줄이 나오긴 하지만 동작은 된다;; 

 

 

 

그치만 Builder 를 구분하기 위해 builder의 이름을 바꿔주면 자동완성과 가독성이 좋아질것이다.

public class Something {
    int A;
    int B;
    int C;
    
    public Something() {}
    
    @Builder
    public Something(int A, int B, int C) {
    	this.A = A;
        this.B = B;
        this.C = C;
    }
    
    @Builder(builderMethodName = "dtoBuilder")
    // Something something = Something.dtoBuilder().dto(dto).build();
    public Something(SomethingDto dto) {
    	this.A = dto.getA();
        this.B = dto.getB();
        this.C = dto.getC();
    }
    
}

 

BuildeMethodName 은 상속관계에서도 부모의 빌더를 가져오는데, 자식의 빌더를 따로 만들기 위해 사용되기도한다.

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


 

작성 중 생각해보니.. 구조가 이상한 거같다...... 왜 저렇게 구성이 되야할까? 흠

'JAVA' 카테고리의 다른 글

Java Stream api 를 이용한 파싱  (0) 2020.06.18
CompletableFuture 을 이용한 비동기 요청  (0) 2020.06.09
기본형과 래퍼 클래스(Wrapper Class)  (0) 2020.02.18
String.equals()  (0) 2020.01.19
Collectors GroupingBy  (0) 2020.01.16
Comments