๋ฐ์ํ
[@Builder] ์์ํ ํด๋์ค์ ๋ฉค๋ฒ๋ ์ฌ์ฉํด์ ๋น๋ ์์ฑํ๊ธฐ
- @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
๋ฐ์ํ