Today I Learned/2023

[@Builder] ์ƒ์†ํ•œ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋„ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋” ์ƒ์„ฑํ•˜๊ธฐ, @SuperBuilder

YURI๐Ÿ•๐Ÿ“๐Ÿถ 2023. 2. 20. 18:23
๋ฐ˜์‘ํ˜•

[@Builder] ์ƒ์†ํ•œ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋„ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋” ์ƒ์„ฑํ•˜๊ธฐ

  1. @Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด, ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
@Getter
@AllArgsConstructor
public class Parent {
    private final String parentName;
    private final int parentAge;
}

@Getter
@Builder
public class Child extends Parent {
    private final String childName;
    private final int childAge;
}
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด Parent๋ฅผ ์ƒ์†๋ฐ›์€ Child์˜ Builder๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Š” Lombok์ด ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋งŒ ๊ณ ๋ คํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ( = ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•ด Child๋ฅผ ์ƒ์„ฑํ•  ๋•Œ parentName, parentAge๋ฅผ ์ด์šฉํ•ด Child๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ. )

 

@Getter
@AllArgsConstructor
public class Parent {
    private final String parentName;
    private final int parentAge;
}

@Getter
public class Child extends Parent {
    private final String childName;
    private final int childAge;

    @Builder
    public Child(String parentName, int parentAge, String childName, int childAge) {
        super(parentName, parentAge);
        this.childName = childName;
        this.childAge = childAge;
    }
}
  • ์ด๋Ÿด ๋•, ๋ช…์‹œ์ ์œผ๋กœ ์ง์ ‘ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ ํ›„ @Builder๋ฅผ ๋ถ™์ด๋ฉด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ๊ท€์ฐฎ๋‹ค๋ฉด, ๋กฌ๋ณต์˜ @SuperBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•œ๋‹ค.

 

Lombok  @SuperBuilder ( v1.18.2. ์ดํ›„)

Builders with fields from superclasses, too.
@Getter
@SuperBuilder
public class Parent {
    // same as before...

@Getter
@SuperBuilder
public class Child extends Parent {
   // same as before...

@Getter
@SuperBuilder
public class Student extends Child {
   // same as before...
  • ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์—  @SuperBuilder๋ฅผ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.
  • @Builder๋ž‘ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.

 

๐Ÿ‘ Reference

๋ฐ˜์‘ํ˜•