item 5 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- λ§μ ν΄λμ€λ νλ μ΄μμ μμμ μμ‘΄νλ€.
public class SpellChecker {
private static final Lexicon dictionary = ...;
private SpellChecker() {} // κ°μ²΄ μμ± λ°©μ§
public static boolean isValid(String word) {...}
public static List<String> suggestions(String typo) {...}
}
- νλμ μ¬μ λ§ μ¬μ©νλ€κ³ κ°μ νλ€λ μ μμ(private static finalμ μ¬μ©) 그리 νλ₯ν΄ λ³΄μ΄μ§ μλ€.
- λ¨μν dictionaryμ finalμ μ κ±°νκ³ setter λ±μΌλ‘ μ¬μ μ κ΅μ²΄νλ λ°©λ²λ μκ² μ§λ§, μ΄λ μ΄μνκ³ μ€λ₯λ₯Ό λ΄κΈ° μ¬μ°λ©° λ©ν°μ€λ λ νκ²½μμλ μΈ μ μλ€.
- μ¦ μ¬μ©νλ μμμ λ°λΌ λμμ΄ λ¬λΌμ§λ ν΄λμ€μλ μ μ μ νΈλ¦¬ν° ν΄λμ€λ μ±κΈν΄ λ°©μμ΄ μ ν©νμ§ μλ€.
public class SpellChecker {
private final Lexicon dictionary;
public SpellChecker(Lexicon dictionary) {
this.dictionary = Objects.requireNonNull(dictionary);
}
public boolean isValid(String word) {...}
public List<String> suggestions(String typo) {...}
}
- μμ‘΄ κ°μ²΄ μ£Όμ μ ν ννλ‘, λ§μΆ€λ² κ²μ¬κΈ°λ₯Ό μμ±ν λ μμ‘΄ κ°μ²΄μΈ μ¬μ μ μ£Όμ ν΄μ£Όλ©΄ λλ€
- μ μμμλ dictionaryλΌλ λ± νλμ μμλ§ μ¬μ©νμ§λ§, μμμ΄ λͺ κ°λ μμ‘΄ κ΄κ³κ° μ΄λ»λ μκ΄μμ΄ μ μλνλ€. λ ν λΆλ³μ 보μ₯νμ¬ (κ°μ μμμ μ¬μ©νλ €λ) μ¬λ¬ ν΄λΌμ΄μΈνΈκ° μμ‘΄ κ°μ²΄λ€μ μμ¬νκ³ κ³΅μ ν μ μκΈ°λ νλ€. μμ‘΄ κ°μ²΄ μ£Όμ μ μμ±μ, μ μ ν©ν°λ¦¬, λΉλ λͺ¨λμ λκ°μ΄ μμ©ν μ μλ€.
Mosaic create(Supplier<? extends Tile> tileFactory) {...}
- ν©ν°λ¦¬λ νΈμΆν λλ§λ€ νΉμ νμ μ μΈμ€ν΄μ€λ₯Ό λ°λ³΅ν΄μ λ§λ€μ΄μ£Όλ κ°μ²΄λ₯Ό λ§νλ€. μ¦, ν©ν°λ¦¬ λ©μλ ν¨ν΄(Factory Method pattern)[Gamma95]μ ꡬνν κ²μ΄λ€.
- μλ° 8μμ μκ°ν Supplier μΈν°νμ΄μ€κ° ν©ν°λ¦¬λ₯Ό ννν μλ²½ν μλ€. Supplierλ₯Ό μ λ ₯μΌλ‘ λ°λ λ©μλλ μΌλ°μ μΌλ‘ νμ μ μμΌλμΉ΄λ νμ (bounded wildcard type)μ μ¬μ©ν΄ ν©ν°λ¦¬μ νμ 맀κ°λ³μλ₯Ό μ νν΄μΌ νλ€.
ν΄λμ€κ° λ΄λΆμ μΌλ‘ νλ μ΄μμ μμμ μμ‘΄νκ³ , κ·Έ μμμ΄ ν΄λμ€ λμμ μν₯μ μ€λ€λ©΄ μ±κΈν΄κ³Ό μ μ μ νΈλ¦¬ν° ν΄λμ€λ μ¬μ©νμ§ μλ κ²μ΄ μ’λ€. μ΄ μμλ€μ ν΄λμ€κ° μ§μ λ§λ€κ² ν΄μλ μ λλ€. λμ νμν μμμ (νΉμ κ·Έ μμμ λ§λ€μ΄μ£Όλ ν©ν°λ¦¬λ₯Ό) μμ±μμ (νΉμ μ μ ν©ν°λ¦¬λ λΉλμ) λ겨주μ. μμ‘΄ κ°μ²΄ μ£Όμ μ΄λΌ νλ μ΄ κΈ°λ²μ ν΄λμ€μ μ μ°μ±, μ¬μ¬μ©μ±, ν μ€νΈ μ©μ΄μ±μ κΈ°λ§νκ² κ°μ ν΄μ€λ€.
μ λͺ ν DIμ λν λ΄μ©!