Effective Java - Item 5
λ§μ ν΄λμ€κ° νλ μ΄μμ μμμ μμ‘΄νλ€.
μ΄νν°λΈ μλ°μμλ λ§μΆ€λ² κ²μ¬κΈ°λ₯Ό μμλ‘ μ€λͺ νκ³ μλλ°, μ¬κΈ°μ λ§μΆ€λ² κ²μ¬κΈ°(SpellChecker)λ μ¬μ (Dictionary)μ μμ‘΄νκ³ μκ³ , μ μ μ νΈλ¦¬ν° ν΄λμ€λ μ±κΈν΄ ν¨ν΄μΌλ‘ ꡬνλμ΄ μλ€.
1
2
3
4
5
6
7
8
public class SpellChecker {
private static final Lexicon dictionary = new KoreanDictionary();
private SpellChecker() {} //κ°μ²΄ μμ± λ°©μ§
public static boolean isValid(String word) { ... }
public static List<String> suggestions(String type) { ... }
}
β μ μ μ νΈλ¦¬ν°λ₯Ό μλͺ» μ¬μ©ν μ - μ μ°νμ§ μκ³ ν μ€νΈκ° μ΄λ ΅λ€.
1
2
3
4
5
6
7
8
9
public class SpellChecker {
private final Lexicon dictionary = new koreanDictionary();
private SpellChecker(...) {}
public static SpellChecker INSTANCE = new SpellChecker(...);
public boolean isValid(String word) { ... }
public List<String> suggestions(String type) { ... }
}
β μ±κΈν΄ ν¨ν΄μ μλͺ» μ¬μ©ν μ - μ μ°νμ§ μκ³ ν μ€νΈνκΈ° μ΄λ ΅λ€.
λ λ°©μμ λͺ¨λ νλμ μ¬μ λ§μ μ¬μ©νλ€κ³ κ°μ νλ€λ μ μμ 그리 μ μ νμ§ μλ€. λ§μ½ λ€λ₯Έ μΈμ΄μ μ¬μ μ μ¬μ©νκ³ μΆμ κ²½μ°μλ μ½λ μ체λ₯Ό λ³κ²½ ν΄μΌλ§ νλ€.
SpellCheckerκ° μ¬λ¬ μ¬μ μ μ¬μ©ν μ μλλ‘ λ§λ€κΈ° μν΄μλ κ°λ¨νκ² dictionary νλμμ finalμ μ κ±°νκ³ λ€λ₯Έ μ¬μ μΌλ‘ κ΅μ²΄νλ λ©μλλ₯Ό μΆκ°ν μλ μμ§λ§, μ΄ λ°©μμ μ€λ₯κ° λ°μνκΈ° μ½κ³ λ©ν° μ€λ λ νκ²½μμλ μ¬μ©ν μ μλ€.
μ΄λ λ― μ¬μ©νλ μμμ λ°λΌ λμμ΄ λ¬λΌμ§λ ν΄λμ€μλ μ μ μ νΈλ¦¬ν° ν΄λμ€λ μ±κΈν΄ λ°©μμ΄ μ ν©νμ§ μλ€.
λμ ν΄λμ€κ° μ¬λ¬ μμ μΈμ€ν΄μ€λ₯Ό μ§μν΄μΌ νλ©° ν΄λΌμ΄μΈνΈκ° μνλ μμμ μ¬μ©ν΄μΌ νλ€.
μ΄ μ‘°κ±΄μ λ§μ‘±νλ κ°λ¨ν ν¨ν΄μ΄ μλλ° λ°λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μμ±μμ νμν μμμ λ겨주λ λ°©μμ΄λ€.
μμ‘΄ κ°μ²΄ μ£Όμ μ ν ννλ‘ λ§μΆ€λ² κ²μ¬κΈ°λ₯Ό μμ±ν λ, μμ‘΄ κ°μ²΄μΈ μ¬μ μ μ£Όμ ν΄μ£Όλ©΄ λλ€.
1
2
3
4
5
6
7
8
9
10
public class SpellChecker {
private final Lexicon dictionary;
public SpellCheck(Lexicon dictionary) {
this.dictionary = Objects.reqquireNonNull(dictionary);
}
public boolean isValid(String word) { ... }
public List<String> suggestions(String type) { ... }
}
β μμ‘΄ κ°μ²΄ μ£Όμ μ μ μ°μ±κ³Ό ν μ€νΈ μ©μ΄μ±μ λμ¬μ€λ€.
μμ‘΄ κ°μ²΄ μ£Όμ ν¨ν΄μ λ§€μ° λ¨μνμ¬ λ§μ νλ‘κ·Έλλ¨Έλ€μ΄ μ΄ λ°©μμ μ΄λ¦μ΄ μλ€λ μ¬μ€μ λͺ¨λ₯Έ μ± μ¬μ©ν΄μλ€.
μμμμλ dictionaryλΌλ νλμ μμλ§μ μ¬μ©νμ§λ§, μμμ΄ λͺ κ°λ μμ‘΄ κ΄κ³κ° μ΄λ»λ μκ΄μμ΄ μ μλλλ€. λν λΆλ³μ 보μ₯νμ¬ κ°μ μμμ μ¬μ©νλ €λ μ¬λ¬ ν΄λΌμ΄μΈνΈκ° μμ‘΄ κ°μ²΄λ€μ μμ¬νκ³ κ³΅μ ν μ μκΈ°λ νλ€.
μμ‘΄ κ°μ²΄ μ£Όμ μ μμ±μ, μ μ ν©ν°λ¦¬, λΉλ λͺ¨λμ λκ°μ΄ μμ©ν μ μλ€.
μμ‘΄ κ°μ²΄ μ£Όμ μ΄ μ μ°μ±κ³Ό ν μ€νΈ μ©μ΄μ±μ κ°μ ν΄μ£ΌκΈ΄ νμ§λ§, μμ‘΄μ±μ΄ μμ² κ°λ λλ ν° νλ‘μ νΈμμλ μ½λλ₯Ό μ΄μ§λ½κ² λ§λ€κΈ°λ νλ€.
κ·Έλμ λκ±°(Dagger), μ£Όμ€(Guice), μ€νλ§(Spring) κ°μ μμ‘΄ κ°μ²΄ μ£Όμ νλ μμν¬λ₯Ό μ¬μ©νλ©΄ μ΄λ° μ΄μ§λ¬μ§μ ν΄μν μ μλ€.
μ΄λ° νλ μμν¬λ€μ μμ‘΄ κ°μ²΄λ₯Ό μ§μ μ£Όμ νλλ‘ μ€κ³λ APIλ₯Ό μλ§κ² μμ©ν΄ μ¬μ©νκ³ μλ€.