Arthur's Blog

์ƒ์†์—์„œ @Builder ์‚ฌ์šฉํ•˜๊ธฐ ๋ณธ๋ฌธ

Language/Java

์ƒ์†์—์„œ @Builder ์‚ฌ์šฉํ•˜๊ธฐ

Leeseojune53 2023. 6. 26. 00:28

๐Ÿ› ๋ฌธ์ œ ์ƒํ™ฉ

error: builder() in ์ž์‹๊ฐ์ฒด cannot hide builder() in ๋ถ€๋ชจ๊ฐ์ฒด

๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ง์—ญํ•˜๋ฉด “์ž์‹๊ฐ์ฒด์˜ builder()๋Š” ๋ถ€๋ชจ๊ฐ์ฒด์˜ builder()์— ์ˆจ์„ ์ˆ˜ ์—†๋‹ค.”๋ผ๋Š” ๋ง์ธ๋ฐ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ƒ์†์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์ด ์žˆ์–ด์•ผํ•œ๋‹ค.

๐Ÿด‍โ˜ ๏ธ ์›์ธ

Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ ํ•ด๋‹น ํด๋ž˜์Šค์— Builder ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.

์ž์‹ ๊ฐ์ฒด์—์„œ ๋™์ผํ•˜๊ฒŒ Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด builder() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ค‘๋ณต๋˜๊ฒŒ ๋˜๋ฉด์„œ error๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

โ™ป ํ•ด๊ฒฐ๋ฒ•

์ž์‹๊ฐ์ฒด ๋˜๋Š” ๋ถ€๋ชจ๊ฐ์ฒด์—์„œ @Builder์–ด๋…ธํ…Œ์ด์…˜์˜ property์ค‘ ํ•˜๋‚˜์ธ builderMethodName๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋ฌผ๋ก  ์‚ฌ์šฉํ•  ๋•Œ๋Š” builderMethodName์—์„œ ์ง€์ •ํ•ด์ค€ method ๋ช…์„ ์‚ฌ์šฉํ•ด์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ˜Ž ์˜ˆ์ œ

@Getter
@Builder
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FeedResponse {

    private Long feedId;
    private String title;
    private String description;
    private Integer price;
    private List<String> tags;
    private String photo;
    private LocalDateTime lastModifyDate;
    private boolean like;
    private Integer count;

    public void setLike(boolean value) {
        this.like = value;
    }

}
 
@Getter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class WriteFeedResponse extends FeedResponse {

    private Integer headCount;
    private LocalDate date;
    private boolean isUsedItem;

    @Builder(builderMethodName = "writeFeedResponseBuilder")
    public WriteFeedResponse(Long feedId, String title, String description,
			Integer price, List<String> tags, String photo,
			LocalDateTime lastModifyDate, boolean like, Integer count,
			Integer headCount, LocalDate date, boolean isUsedItem) {
    	super(feedId, title, description, price,
				tags, photo, lastModifyDate, like, count);
    	this.headCount = headCount;
    	this.date = date;
    	this.isUsedItem = isUsedItem;
	}

    public void setGroupFeed(Integer headCount, LocalDate date) {
        this.headCount = headCount;
        this.date = date;
    }

    public void setLike(boolean value) {
        super.setLike(value);
    }

}
 

์•„๋ž˜๋Š” ์‹ค์ œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ๋ฒ•์ด๋‹ค.

WriteFeedResponse feedResponse = 
    WriteFeedResponse.writeFeedResponseBuilder()
    .build();