item 2 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
μμ΄ν 2 μμ±μμ 맀κ°λ³μκ° λ§λ€λ©΄ λΉλλ₯Ό κ³ λ €νλΌ
- μ μ ν©ν°λ¦¬μ μμ±μμλ λκ°μ μ μ½μ΄ νλ μλ€. μ νμ 맀κ°λ³μκ° λ§μ λ μ μ ν λμνκΈ° μ΄λ ΅λ€λ μ μ΄λ€.
맀κ°λ³μκ° λ§μ λ μ¬μ©νλ λμ
μ μΈ΅μ μμ±μ ν¨ν΄: νμ₯νκΈ° μ΄λ ΅λ€.
- μ μΈ΅μ μμ±μ ν¨ν΄λ μΈ μλ μμ§λ§, 맀κ°λ³μ κ°μκ° λ§μμ§λ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό μμ±νκ±°λ μ½κΈ° μ΄λ ΅λ€
// νν μ¬μ©λλ μ μΈ΅μ μμ±μ ν¨ν΄ - νμ₯νκΈ° μ΄λ €μ
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 NutritionFacts(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public NutritionFacts(int servingSize, int servings, int calories) {
this(servingSize, servings, calories, 0);
}
public NutritionFacts(int servingSize, int servings,int calories, int fat) {
this(servingSize, servings, calories, fat, 0);
}
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
this(servingSize, servings, calories, fat, sodium, 0);
}
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
this.sodium = sodium;
this.carbohydrate = carbohydrate;
}
}
μλ°λΉμ¦ ν¨ν΄: μΌκ΄μ±μ΄ κΉ¨μ§κ³ , λΆλ³μΌλ‘ λ§λ€ μ μλ€.
public class NutritionFacts {
// 맀κ°λ³μλ€μ (κΈ°λ³Έκ°μ΄ μλ€λ©΄) κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°νλλ€.
private int servingSize = -1; // νμ; κΈ°λ³Έκ° μμ
private int servings = -1; // νμ; κΈ°λ³Έκ° μμ
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public NutritionFacts() { }
// μΈν° λ©μλλ€
public void setServingSize(int val) { servingSize = val; }
public void setServings(int val) { servings = val; }
public void setCalories(int val) { calories = val; }
public void setFat(int val) { fat = val; }
public void setSodium(int val) { sodium = val; }
public void setCarbohydrate(int val) { carbohydrate = val; }
}
- μ μΈ΅μ μμ±μ ν¨ν΄μ λ¨μ λ€μ΄ μλ°λΉμ¦ ν¨ν΄μμλ λ μ΄μ 보μ΄μ§ μλλ€. μ½λκ° κΈΈμ΄μ§κΈ΄ νμ§λ§ μΈμ€ν΄μ€λ₯Ό λ§λ€κΈ° μ½κ³ , κ·Έ κ²°κ³Ό λ μ½κΈ° μ¬μ΄ μ½λκ° λμλ€.
NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);
- νμ§λ§ λΆννλ μλ°λΉμ¦λ μμ λ§μ μ¬κ°ν λ¨μ μ μ§λκ³ μλ€.
μλ°λΉμ¦ ν¨ν΄μμλ κ°μ²΄ νλλ₯Ό λ§λ€λ €λ©΄ λ©μλλ₯Ό μ¬λ¬ κ° νΈμΆν΄μΌ νκ³ ,
κ°μ²΄κ° μμ ν μμ±λκΈ° μ κΉμ§λ μΌκ΄μ±(consistency)μ΄ λ¬΄λμ§ μνμ λμ΄κ² λλ€.
- μ΄μ²λΌ μΌκ΄μ±μ΄ 무λμ§λ λ¬Έμ λλ¬Έμ μλ°λΉμ¦ ν¨ν΄μμλ ν΄λμ€λ₯Ό λΆλ³μΌλ‘ λ§λ€ μ μλ€.
λΉλ ν¨ν΄ : μ μΈ΅μ μμ±μ ν¨ν΄κ³Ό μλ°λΉμ¦ ν¨ν΄μ μ₯μ λ§ μ·¨νλ€.
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
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;
}
}
- λΉλ ν¨ν΄μ (νμ΄μ¬κ³Ό μ€μΉΌλΌμ μλ) λͺ λͺ λ μ νμ 맀κ°λ³μ(named optional parameters)λ₯Ό νλ΄ λΈ κ²μ΄λ€.
ν΅μ¬μ 리
μμ±μλ μ μ ν©ν°λ¦¬κ° μ²λ¦¬ν΄μΌ ν 맀κ°λ³μκ° λ§λ€λ©΄ λΉλ ν¨ν΄μ μ ννλ κ² λ λ«λ€. 맀κ°λ³μ μ€ λ€μκ° νμκ° μλκ±°λ κ°μ νμ μ΄λ©΄ νΉν λ κ·Έλ λ€. λΉλλ μ μΈ΅μ μμ±μλ³΄λ€ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό μ½κ³ μ°κΈ°κ° ν¨μ¬ κ°κ²°νκ³ , μλ°λΉμ¦λ³΄λ€ ν¨μ¬ μμ νλ€.
λ
λΉλ ν¨ν΄μ μν μΆκ°μ μΈ μ½λκ° λ§μ보μ΄λ, Lobmokμ @Builderμ λμμ λ°μΌλ©΄ νκ²° μμνκ² κ΅¬νν μ μλ€.