2023. 1. 5. 09:30γJAVA/Effective JAVA
μμ΄ν 2. μμ±μμ 맀κ°λ³μκ° λ§λ€λ©΄ λΉλλ₯Ό κ³ λ €νλΌ.
μμ μμ±ν λ΄μ©μμλ μμ±μμ 맀κ°λ³μκ° λ§λ€λ©΄ κ³ λ €ν μ μλ λ°©μμΌλ‘ μ μΈ΅μ μμ±μ ν¨ν΄κ³Ό μλ°λΉμ¦ ν¨ν΄μ λν΄μ μ€λͺ νλ€.
κ·Όλ° μ΄ λκ°μ λμμλ κ°κ°μ λ¨μ μ΄ μμλλ°..
λ¨Όμ μ μΈ΅μ μμ±μ ν¨ν΄μ μ°μ 맀κ°λ³μκ° λμ΄λλ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό μμ±νκ±°λ μ½κ³ νμ νκΈ° λ²κ±°λ‘λ€λ λ¨μ μ΄ μλ€.
μλ° λΉμ¦ ν¨ν΄μ μμ ν κ°μ²΄λ₯Ό μμ±νκΈ° μν΄μλ λ©μλλ₯Ό μ¬λ¬λ² νΈμΆν΄μΌνκ³ , μμ ν κ°μ²΄λ₯Ό μμ±νκΈ° μ κΉμ§λ μΌκ΄μ±μ΄ 무λμ§ μνκ° λ μ μλ€λ λ¨μ μ΄ μλ€.
λμ1κ³Ό λμ2κ° λͺ¨λ λ¨μ ?μ΄ μ‘΄μ¬νλλ°.. 3λ²μ§Έ λμμΌλ‘ λΉλν¨ν΄μ κΆμ₯νλ€.
λμ3. λΉλ ν¨ν΄ Builder Pattern
λΉλ ν¨ν΄μ μμμμ μ μΈ΅μ μμ±μ ν¨ν΄μ μ₯μ μ΄λ μμ μ±κ³Ό μλ°λΉμ¦ ν¨ν΄μ κ°λ μ±μ κ²ΈλΉν ν¨ν΄μ΄λ€.
λΉλν¨ν΄μ ν΄λΌμ΄μΈνΈλ νμν κ°μ²΄λ₯Ό μ§μ λ§λλ λμ , νμ 맀κ°λ³μλ§μΌλ‘ μμ±μλ₯Ό νΈμΆν΄ λΉλ κ°μ²΄λ₯Ό μ»λλ€.
κ·Έλ° λ€μ λΉλ κ°μ²΄κ° μ 곡νλ μΌμ’ μ μΈν° λ©μλλ€λ‘ μνλ μ ν 맀κ°λ³μλ€μ μ€μ νλ€.
κ·Έλ¦¬κ³ λ§€κ°λ³μκ° μλ build λ©μλλ₯Ό νΈμΆν΄μ λΆλ³ κ°μ²΄λ₯Ό μ»μ μ μλ€.
public class NutritionFacts {
private final int servingSize; // (mL, 1ν μ 곡λ) νμ
private final int servings; // (ν, μ΄ nν μ 곡λ) νμ
private final int calories; // (1ν μ 곡γ·λλΉ) μ ν
private final int fat; // (g/1ν μ 곡λ)) μ ν
private final int sodium; // (mg/1ν μ 곡λ) μ ν
private final int carbohydrate; // (g/1ν μ 곡λ) μ ν
public static class Builder {
// νμ 맀κ°λ³μ
private final int servingSize;
private final int servings;
// μ ν 맀κ°λ³μ : κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°ννλ€.
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
public Builder calories(int val) {
calories = val;
return this;
}
public Builder fat(int val) {
fat = val;
return this;
}
public Builder sodium(int val) {
sodium = val;
return this;
}
public Builder carbohydrate(int val) {
carbohydrate = val;
return this;
}
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
μ΄ ν΄λμ€λ λΆλ³ ν΄λμ€λ‘, λͺ¨λ 맀κ°λ³μμ κΈ°λ³Έκ°λ€μ ν κ³³μ λͺ¨μ λκ³ , λΉλμ μΈν° λ©μλλ€μ λΉλ μμ μ λ°ννκΈ° λλ¬Έμ μ°μμ μΌλ‘ νΈμΆν μ μλ€.
-> μ΄λ° λ°©μμ ν루μΈνΈ API(fluent API) νΉμ λ©μλ μ°μ(method chaining) μ΄λΌκ³ νλ€.