π€ λΉλ ν¨ν΄(Builder Pattern) ?
볡μ‘ν κ°μ²΄μ μμ± κ³Όμ κ³Ό νν λ°©λ²μ λΆλ¦¬νμ¬ λ€μν ꡬμ±μ μΈμ€ν΄μ€λ₯Ό λ§λλ μμ± ν¨ν΄μ΄λ€. μμ±μμ λ€μ΄κ° λ§€κ° λ³μλ₯Ό λ©μλλ‘ νλνλ λ°μλ€μ΄κ³ λ§μ§λ§μ ν΅ν© λΉλν΄μ κ°μ²΄λ₯Ό μμ±νλ λ°©μμ΄λ€.
μΆμ² : Inpa Dev
β κΈ°μ‘΄ ν¨ν΄
π μμ±μ ν¨ν΄
μμ±μλ₯Ό ν΅ν΄μ κ°μ μ€μ νλ ν¨ν΄μ΄λ€.
μ€λ²λ‘λ©μ ν΅ν΄ νμλ‘ μ€μ ν΄μΌνλ κ°λ€κ³Ό νμ§ μμλ λλ κ°λ€μ μ‘°μ νμ¬ λ§λ€ μ μλ€.
νμ§λ§ ν΄λμ€μ νλκ° λ§μκ²½μ° μμ±μμ 맀κ°λ³μ λν λμ΄λκ² λκ³ μ λ ₯ν 맀κ°λ³μμ μμμ λ§κ² κ°λ€μ μ λ ₯ν΄μΌ νκΈ° λλ¬Έμ μμλ₯Ό λͺ¨λ κΈ°μ΅νμ§ μλλ€λ©΄ μ€μλ₯Ό μ λ°ν μ μκ³ ,
μλ΅νκ³ μΆμ 맀κ°λ³μλ₯Ό μ νμ μΌλ‘ μλ΅ν μ μλ€.
public class Member{
private String id;
private String name;
private String address;
private String email;
public Member(String id, String name, String address, String email){
this.id = id;
this.name = name;
this.address = address;
this.email = email;
}
}
π μλ° λΉ(Java Beans) ν¨ν΄
Setterλ©μλλ₯Ό μ¬μ©νμ¬ ν΄λμ€ νλμ κ°μ μ€μ νλ ν¨ν΄μ΄λ€.
μμ±μ ν¨ν΄μμμ λ¬Έμ μ λ€μ setterλ©μλλ₯Ό μ¬μ©νμ¬ κ°μ μ§μ μ€μ νκ³ , μλ΅νκ³ μΆμ κ°μ μ νμ μΌλ‘ μλ΅ν μ μλ€.
νμ§λ§ μ΄λ¬ν μ μ°ν κ° μ€μ μΌλ‘ μΈν΄ μΌκ΄μ±(consistency)κ³Ό λΆλ³μ±(immutable)μ λν λ¬Έμ κ° λ°μνλ€.
μΌκ΄μ± : κ°μ²΄ μμ± μμ μ λͺ¨λ κ°μ μ£Όμ νμ§ μκ³ μμ± μ΄ν κ°λ°μκ° setterλ©μλλ₯Ό ν΅ν΄ μ€μ νκΈ° λλ¬Έμ κΌ μΈν λμ΄μΌ ν κ°μ΄ μΈν λμ§ μκ³ μ¬μ©νκ² λλ©΄ μΌκ΄μ±μ΄ κΉ¨μ§κ² λλ€.
λΆλ³μ± : κ°μ²΄λ₯Ό μμ±ν λ νλ κ°μ μ€μ νκΈ° μν΄ setterλ©μλλ₯Ό λ§λ€μμ§λ§ μΈλΆμμ setterλ©μλμ μ κ·Όμ΄ κ°λ₯νλ€ ,μ΄λ μ΄λμ λκ΅°κ° setterλ©μλλ₯Ό νΈμΆνμ¬ κ°μ²΄λ₯Ό μμ ν μ μλ μ¬μ§κ° μκΈ° λλ¬Έμ λΆλ³μ±μ 보μ₯ν μ μλ€.
public class Member{
private String id;
private String name;
private String address;
private String email;
public void setId(String id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public void setAddress(String address){
this.address = address;
}
public void setEmail(String email){
this.email = email;
}
}
β λΉλ ν¨ν΄
λ³λμ Builder ν΄λμ€λ₯Ό λ§λ€μ΄ λ©μλλ₯Ό ν΅ν΄ κ°μ μ λ ₯ λ°μ ν build()λ©μλλ‘ νλμ μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
π ꡬν
public class Member {
private String id;
private String name;
private String address;
private String email;
private Member(MemberBuilder builder){
this.id = builder.id;
this.name = builder.name;
this.address = builder.address;
this.email = builder.email;
}
public static class MemberBuilder {
private String id;
private String name;
private String address;
private String email;
public MemberBuilder id(String id){
this.id = id;
return this;
}
public MemberBuilder name(String name){
this.name = name;
return this;
}
public MemberBuilder address(String address){
this.address = address;
return this;
}
public MemberBuilder email(String email){
this.email = email;
return this;
}
public Member build(){
return new Member(this);
}
}
}
π μ¬μ©
public static void main(String[] args) {
Member member = new MemberBuilder()
.id("test")
.name("name")
.address("address")
.email("email")
.build();
}
buiderλ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±νκ³ νλλͺ κ³Ό κ°μ λ©μλλ₯Ό ν΅ν΄μ κ°μ μ€μ νκΈ° λλ¬Έμ κ°λ μ±λ ν₯μλλ€.
λν νλμ κ°μ μ€μ νλ λ©μλλ€μ this μ¦ MemberBuilderλ₯Ό returnνκΈ° λλ¬Έμ 체μ΄λμ μ¬μ©νμ¬ μμμ μκ΄ μμ΄ κ°μ μ€μ νλ©΄μ κΈ°μ‘΄μ μμ±μ ν¨ν΄μ λ¬Έμ μ λ€μ 보μνκ³ , build λ©μλλ₯Ό ν΅ν΄ κ°μ μ€μ νλ©΄μ μμ±λκ³ κ·Έ νμλ μμ ν μ μκΈ° λλ¬Έμ μλ° λΉ ν¨ν΄μμμ λ¬Έμ μ μ΄μλ μΌκ΄μ±κ³Ό λΆλ³μ±μ κ΄ν λ¬Έμ λ 보μν μ μλ€.
μ΄μ κ°μ μΌκ΄λ νλ‘μΈμ€λ‘ κ°μ²΄λ₯Ό μμ±νκΈ° λλ¬Έμ μ€μ μ€λ₯μ κ°μ μ€μλν λ°©μ§ ν μ μλ€.
νμ§λ§ κ°μ²΄μ νλλ€μ΄ λ§μ§ μλ€λ©΄ μμ±μ ν¨ν΄μ μ¬μ©νλκ²μ΄ λ λμ μ νμΌ μ μλ€.
μλνλ©΄ κ°λ μ±, κ° μ€μ μμ, κ° μλ΅ λ± κ°μ μμ±μ ν¨ν΄μ λ¨μ μ΄ νλκ° μ μμΌλ‘μ¨ κ·Ήλ³΅ λ μ μλ€.
λν λΉλ ν¨ν΄μ μ½λμ 볡μ‘μ±μ΄ μ¬λΌκ°λ€λ λ¨μ μ΄ μλ€.
(LombokλΌμ΄λΈλ¬λ¦¬μ @Builder μ΄λ Έν μ΄μ μ ν΅ν΄ λΉλ ν΄λμ€λ₯Ό λ§λ€μ§ μκ³ λΉλ ν¨ν΄μ μ¬μ©ν μ μλ€.)
'Backend' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν μ€νΈ μ½λ μ μμ±ν κΉμ? (TDD?) (0) | 2024.03.11 |
---|