λΉλν¨ν΄
λΉλν¨ν΄μ 볡μ‘ν κ°μ²΄ μμ± κ³Όμ κ³Ό νν λ°©λ²μ λΆλ¦¬ν΄μ λ€μν ꡬμ±μ μΈμ€ν΄μ€λ₯Ό λ§λλ μμ± ν¨ν΄μ΄λ€.
κ°μ²΄λ₯Ό λ§λλ λ°©λ²μ 3κ°μ§κ° μλλ° 1. μμ±μ μμ± 2. setter μ£Όμ
3. λΉλ ν¨ν΄μ΄λ€.
μ μΈ΅μ μμ±μ ν¨ν΄
맀κ°λ³μλ₯Ό ν΅ν΄μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μΆμ λ μμ±μλ₯Ό μ€λ²λ‘λ© νλ λ°©λ²
class Member {
private String name;
private int age;
public Member(String name, int age){
this.name = name;
this.age = age;
}
public Member(String name){
this.name = name;
}
}
μ΄λ° ν¨ν΄μ ν΄λμ€ μΈμ€ν΄μ€ νλκ° λ§μ μλ‘ μμ±μμ λ€μ΄κ° μΈμμ μκ° λμ΄λ λͺ λ²μ§Έ μΈμκ° μ΄λ€ νλμλμ§ ν·κ°λ¦΄ μλ μκ² λλ€.
λν, 맀κ°λ³μ νΉμ±μ μμλ₯Ό λ°λΌμΌ νκΈ° λλ¬Έμ μνμ§ μλ κ°μλ 0μ νλΌλ―Έν°λ‘ μ λ¬ν΄μΌλκΈ° λλ¬Έμ μ νμ μΌλ‘ νλλ₯Ό μ νν μ μλ€.
μλ° λΉ ν¨ν΄
μ λ¨μ μ ν΄κ²°νκΈ° μν΄ setter λ©μλλ₯Ό μ¬μ©ν λ°©λ²μ΄ μκ²Όλ€.
맀κ°λ³μκ° μλ μμ±μλ‘ κ°μ²΄λ₯Ό μμ±ν ν setterλ₯Ό ν΅ν΄ ν΄λμ€ νλμ μ΄κΈ°κ°μ μ€μ νλ λ°©λ²μ΄λ€.
class Member {
private String name;
private int age;
public Member(){}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
}
κΈ°μ‘΄ μμ±μ μ€λ²λ‘λ©μμ λνλ¬λ κΈ°λ
μ± λ¬Έμ κ° μ¬λΌμ§κ³ μ νμ μΈ νλΌλ―Έν°μ λν΄ ν΄λΉλλ setter λ©μλλ₯Ό νΈμΆνλ©΄ λΌμ μ μ°νκ² κ°μ²΄λ₯Ό μμ±ν μ μλ€.
νμ§λ§ κ°μ²΄ μμ± μμ μ λͺ¨λ κ°λ€μ μ£Όμ
νμ§ μμ μΌκ΄μ± λ¬Έμ μ λΆλ³μ± λ¬Έμ κ° λνλλ€.
μΌκ΄μ± λ¬Έμ ? νμ 맀κ°λ³μλ κ°μ²΄κ° μ΄κΈ°νλ λ λ°λμ μ€μ λμ΄μΌνλ κ°μΈλ° κ°λ°μκ° κΉλΉ‘νκ³ setName() λ©μλλ₯Ό νΈμΆνμ§ μμλ€λ©΄ κ°μ²΄μ μΌκ΄μ±μ΄ 무λμ§ μνκ° λλ€. κ°μ²΄κ° μ ν¨νμ§ μμ μνκ° λκΈ° λλ¬Έμ λ€λ₯Έ κ³³μμ ν΄λΉ μΈμ€ν΄μ€λ₯Ό μ¬μ©νκ² λλ€λ©΄ λ°νμ μμΈκ° λ°μν μ μλ€.
λΆλ³μ± λ¬Έμ ? κ°μ²΄λ₯Ό μμ±νμμλ μΈλΆμ μΌλ‘ setterλ©μλλ₯Ό λ ΈμΆνκ³ μκΈ° λλ¬Έμ μΈμ μ΄λμ λκ΅°κ° setterλ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό ν¨λΆλ‘ μ‘°μν μ μλ€. μ΄ λ¬Έμ κ° λΆλ³ν¨μ 보μ₯ν μ μλ λ΄μ©μ΄λ€.
λΉλν¨ν΄
μ λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ λ³λμ bulider ν΄λμ€λ₯Ό λ§λ€μ΄ λ©μλλ₯Ό ν΅ν΄ κ°μ μ
λ ₯λ°μ μ μ΅μ’
μ μΌλ‘ build() λ©μλλ‘ νλμ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ λ¦¬ν΄νλ ν¨ν΄μ΄λ€.
λΉλν¨ν΄μ μ¬μ©νλ©΄ λμ΄μ μμ±μ μ€λ²λ‘λ© μ΄κ±°λ₯Ό νμ§ μμλ λκ³ , λ°μ΄ν°μ μμμ μκ΄μμ΄ κ°μ²΄λ₯Ό λ§λ€μ΄λ΄κΈ° λλ¬Έμ μμ±μ νλΌλ―Έν° μμλ₯Ό νμ
νμ§ μμλ λλ€. λν, μλͺ»λ κ°μ λ£μ μ€μλ μ€μ΄λ€κ² λλ€.
λΉλ ν΄λμ€
Member ν΄λμ€μ κ°μ μΈμλ€λ‘ ꡬμ νκ³ setter λ©μλλ₯Ό ꡬννλ€.
class MemberBuilder {
private String name;
private int age;
public MemberBuilder name(String name) {
this.name = name;
return this;
}
public MemberBuilder age(int age) {
this.age = age;
return this;
}
public Member build() {
return new Member(name, age);
}
}
return thisλΆλΆμ 보면 MemberBuilder κ°μ²΄ μμ μ 리ν΄νλ κ²μ λ³Ό μ μλ€. κ°μ²΄ μμ μ 리ν΄ν¨μΌλ‘μ¨ λ©μλ νΈμΆ ν μ°μμ μΌλ‘ λΉλ λ©μλλ₯Ό 체μ΄λνμ¬ νΈμΆ ν μ μλ€. λ§μ§λ§μΌλ‘ buildλ©μλλ₯Ό ꡬμ±ν΄μ€μΌλ‘μ¨ λΉλ ν΄λμ€μ νλλ₯Ό Member μμ±μμ μΈμμ λ£μ΄μ€ Member μΈμ€ν΄μ€λ₯Ό μ»κ² λλ€.
μ₯μ
- κ°λ μ±μ΄ μ’μμ§λ€.
- μ μ°μ±μ ν보ν μ μλ€.
- λΆλ³μ±μ ν보ν μ μλ€.
- νμν λ°μ΄ν°λ§ μ€μ ν μ μλ€.
λ¨μ
- μ½λμ 볡μ‘μ±μ΄ μ¦κ°νλ€.
- μμ±μ보λ€λ μ±λ₯μ΄ λ¨μ΄μ§λ€.
- μ§λμΉ λΉλ λ¨μ©μ κΈμ§! ν΄λμ€ νλμ κ°μκ° 4κ°λ³΄λ€ μ κ³ νλμ λ³κ²½ κ°λ₯μ±μ΄ μλ κ²½μ°λΌλ©΄ μ μ ν©ν 리 λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ λ μ’μ μκ° μλ€.
μ μ ν©ν 리 λ©μλ κ°λ¨ν μ€λͺ
νμλ©΄
λ³λμ κ°μ²΄ μμ±μ μν μ νλ ν΄λμ€ λ©μλλ₯Ό ν΅ν΄ κ°μ μ μΌλ‘ κ°μ²΄ μμ±μ μ λνλ κ²!
class Member {
private String name;
private Member(String name) {
this.name = name;
}
public static Member nameOf(String name) {
return new Member(name);
}
}