λΉλ ν¨ν΄ (Builder Pattern)
π λΉλ ν¨ν΄μ΄λ?
π κΈ°μ‘΄ μμ±μ λ°©μκ³Όμ μ°¨μ΄μ
What? Why?
λΉλ ν¨ν΄(Builder Pattern)μ 볡μ‘ν κ°μ²΄λ₯Ό λ¨κ³λ³λ‘ μμ±ν μ μκ² ν΄μ£Όλ λμμΈ ν¨ν΄μ΄λ€. κ°μ²΄μ μμ± κ³Όμ μ μΆμννμ¬, λ€μν ννμ κ°μ²΄λ₯Ό μ μ°νκ² μμ±ν μ μλλ‘ λμμ€λ€.
κΈ°μ‘΄ μμ±μ λ°©μκ³Όμ λΉκ΅
κΈ°μ‘΄ μμ±μ λ°©μ
κΈ°μ‘΄μ μμ±μ λ°©μμ κ°μ²΄λ₯Ό μμ±ν λ νμν λͺ¨λ νλΌλ―Έν°λ₯Ό μμ±μμ μ λ¬ν΄μΌ νλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class User {
private Long id;
private String userId;
private String username;
private Set<Role> roles;
// κΈ°ν νλ λ° λ©μλ
public User(Long id, String userId, String username, Set<Role> roles) {
this.id = id;
this.userId = userId;
this.username = username;
this.roles = roles;
}
}
λΉλ ν¨ν΄ λ°©μ
λΉλ ν¨ν΄μ μ¬μ©νλ©΄ κ°μ²΄μ νλλ₯Ό λ¨κ³λ³λ‘ μ€μ ν μ μμΌλ©°, κ°λ μ±μ΄ λμμ§κ³ μ νμ μΈ νλλ₯Ό μ½κ² μ²λ¦¬ν μ μλ€.
1
2
3
4
5
User user = User.builder()
.userId("uniqueUserId123")
.username("νκΈΈλ")
.roles(new HashSet<>())
.build();
λΉλ ν¨ν΄μ΄ λ±μ₯νκ² λ κ³κΈ°
κΈ°μ‘΄μ μμ±μ λ°©μμ 맀κ°λ³μκ° λ§μμ§λ©΄ μ½λκ° λ³΅μ‘ν΄μ§κ³ κ°λ μ±μ΄ λ¨μ΄μ§λ λ¨μ μ΄ μλ€.
νΉν, λμΌν νμ μ μ¬λ¬ νλΌλ―Έν°κ° μμ κ²½μ° μ€μνκΈ° μ½λ€. μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λΉλ ν¨ν΄μ΄ λ±μ₯νκ² λμλ€.
μ₯λ¨μ λΉκ΅
λΉλ ν¨ν΄μ μ₯μ
κ°λ μ± ν₯μ
λ©μλ 체μ΄λμ ν΅ν΄ μ΄λ€ νλμ μ΄λ€ κ°μ μ€μ νλμ§ λͺ ννκ² λλ¬λλ€.μ μ°μ±
μ νμ μΈ νλλ₯Ό μ½κ² μ€μ ν μ μμΌλ©°, νλμ μμμ μκ΄μμ΄ κ°μ μ§μ ν μ μλ€.λΆλ³ κ°μ²΄ μμ±
λΉλ ν¨ν΄μ μ¬μ©νλ©΄ κ°μ²΄λ₯Ό λΆλ³μΌλ‘ λ§λ€κΈ° μ½λ€.볡μ‘ν κ°μ²΄ μμ± μ©μ΄
κ°μ²΄ μμ± κ³Όμ μ΄ λ³΅μ‘ν κ²½μ° λΉλ ν¨ν΄μ΄ λμ± ν¨κ³Όμ μ΄λ€.
λΉλ ν¨ν΄μ λ¨μ
μ½λλ μ¦κ°
λ³λμ λΉλ ν΄λμ€λ₯Ό μμ±νκ±°λ, Lombokκ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ§ μμΌλ©΄ μ½λκ° κΈΈμ΄μ§ μ μλ€.μ±λ₯ μ€λ²ν€λ
λ§€μ° λΉλ²ν κ°μ²΄ μμ±μ μꡬνλ κ²½μ° λΉλ ν¨ν΄μ μ½κ°μ μ±λ₯ μ€λ²ν€λλ₯Ό μ λ°ν μ μλ€. νμ§λ§ λλΆλΆμ κ²½μ° μ΄λ ν° λ¬Έμ κ° λμ§ μλλ€.
μμ±μ λ°©μμ μ₯μ
κ°λ¨ν¨
λ¨μν κ°μ²΄λ₯Ό μμ±ν λλ μμ±μ λ°©μμ΄ λ κ°λ¨νκ³ μ§κ΄μ μ΄λ€.μ±λ₯
λΉλ ν¨ν΄μ λΉν΄ μ½κ°μ μ±λ₯ μ΄μ μ κ°μ§ μ μλ€.
μμ±μ λ°©μμ λ¨μ
κ°λ μ± μ ν
맀κ°λ³μκ° λ§μμ§λ©΄ μμ±μμ κ°λ μ±μ΄ λ¨μ΄μ§λ€.μ μ°μ± λΆμ‘±
μ νμ μΈ νλλ₯Ό μ€μ νκΈ° μ΄λ ΅κ³ , νλμ μμμ μμ‘΄νκ² λλ€.μ μ§λ³΄μ μ΄λ €μ
νλκ° μΆκ°λκ±°λ λ³κ²½λ λλ§λ€ μμ±μλ μμ ν΄μΌ νλ€.
μμ½
λΉλ ν¨ν΄μ κ°μ²΄ μμ± μ κ°λ μ±κ³Ό μ μ°μ±μ λμ΄κ³ , 볡μ‘ν κ°μ²΄λ₯Ό λ³΄λ€ μ½κ² μμ±ν μ μκ² ν΄μ€λ€. νΉν νλκ° λ§κ±°λ μ νμ μΈ νλκ° μλ κ²½μ° λΉλ ν¨ν΄μ΄ λ§€μ° μ μ©νλ€.
λ°λ©΄, λ¨μν κ°μ²΄ μμ±μλ κΈ°μ‘΄μ μμ±μ λ°©μμ΄ λ κ°λ¨ν μ μλ€. μν©μ λ§κ² μ μ ν ν¨ν΄μ μ ννλ κ²μ΄ μ€μνλ€.