μμ΄ν μ μ λͺ©μ ν΅ν΄ 'λͺ¨λ κ²½μ°μ μμ‘΄ κ°μ²΄ μ£Όμ μ μ¬μ©ν΄μΌκ² λ€'λΌκ³ μ΄ν΄νμ§ μκΈ°λ₯Ό λ°λλ€. μ¬μ©νλ μμμ λ°λΌ λμμ΄ λ¬λΌμ§λ ν΄λμ€μΈ κ²½μ°μ 'μμ‘΄ κ°μ²΄ μ£Όμ 'μ κ³ λ €ν΄λ³΄λλ‘ νμ. (μμΌλ‘ λμ¬ μμμμλ νμΈν μ μλ―μ΄ μ¬μ μ μ’ λ₯(Dictionary)μ λ°λΌ SpellCheckerλΌλ ν΄λμ€μ λμμ΄ λ¬λΌμ§λ κ²½μ°μ μμ‘΄ κ°μ²΄ μ£Όμ μ μ¬μ©νλ κ²μ μ μ μλ€.)
public class SpellChecker{
private static final Dictionary dictionary = new Dictionary(); // μ΄κ²μ΄ μ λͺ©μμ λμ¨ μμμ μ§μ λͺ
μνλ μμμ΄λ€.
private SpellChecker(){}
public static boolean isValid(String word){
// μ¬κΈ°μ SpellChecker μ½λκ° μΆκ°μ μΌλ‘ μλ€κ³ κ°μ νμ
return dictionary.contains(word);
}
public static List<String> suggestions(String typo){
// μ¬κΈ°μ SpellChecker μ½λκ° μΆκ°μ μΌλ‘ μλ€κ³ κ°μ νμ
return dictionary.closeWordsTo(typo);
}
}
ν΄λΉ μ½λμ 첫 λ²μ§Έ λ¬Έμ μ μ ν μ€νΈμ μ΄λ €μμ΄λ€. μ°μ , λ©μλ μμ μλ μ½λλ€μ κ°μ§ dictionaryλ‘ ν μ€νΈλ₯Ό ν μ μλ λ¬Έμ κ° μλ€. κ·Έλ¦¬κ³ dictionaryλ₯Ό λ§λλλ° λ§μ λΉμ©μ΄ λ λ€λΌκ³ κ°μ νλ©΄(CPUμ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ΄λ€κ³ κ°μ ), ν μ€νΈλ₯Ό λ§λλλ° λ§μ λΉν¨μ¨μ΄ λ°μνλ€. μμ μμμ ν μ€νΈ μ½λλ μλμ²λΌλ§ λ§λ€ μ μμ κ±°λ€.
class SpellCheckerTest{
@Test
void isValid(){
assertTrue(SpellChecker.isValid("test"));
}
}
λ λ²μ§Έ λ¬Έμ μ μ μ μ°μ±κ³Ό μ¬μ¬μ©μ±μ΄ λ¨μ΄μ§λ€λ κ²μ΄λ€. νμ¬ 'νκ΅μ΄ μ¬μ 'λ§ μ§μν΄μ£Όκ³ μλλ° 'μμ΄ μ¬μ ', 'μΌλ³Έμ΄ μ¬μ ', 'μ€κ΅μ΄ μ¬μ 'λ±μ μ§μν΄μ€λ€κ³ μκ°νλ©΄ κ·Έ μ΄μ λ₯Ό μ μ μμ κ²μ΄λ€.
λ κ°μ§ λ¬Έμ μ μ λν ν΄κ²°μ± μΌλ‘ μ± μμλ μμ‘΄ κ°μ²΄ μ£Όμ μ μ€λͺ νκ³ μλ€.
public class SpellChecker{
private final Dictionary dictionary;
public SpellChecker(Dictionary dictionary){
this.dictionary = dictionary;
}
public static boolean isValid(String word){
// μ¬κΈ°μ SpellChecker μ½λκ° μΆκ°μ μΌλ‘ μλ€κ³ κ°μ νμ
return dictionary.contains(word);
}
public static List<String> suggestions(String typo){
// μ¬κΈ°μ SpellChecker μ½λκ° μΆκ°μ μΌλ‘ μλ€κ³ κ°μ νμ
return dictionary.closeWordsTo(typo);
}
}
μ΄λ, Dictionaryλ μΈν°νμ΄μ€μ¬μΌ νλ€.
public interface Dictionary{
boolean contains(String word);
List<String> closeWordsTo(String typo);
}
μ½λμμ νμΈν μ μλ―μ΄ μ΄λ μ μ°μ±κ³Ό μ¬μ¬μ©μ±μ ν보ν μ μλ€.(μμ΄ μ¬μ , μΌλ³Έμ΄ μ¬μ , μ€κ΅μ΄ μ¬μ μ΄ μ½κ² μ μ©λ κ²μ΄λ€.)
κ·Έλ¦¬κ³ κ°μ§ dictionaryλ₯Ό μλμ κ°μ΄ μ μ©ν μ μκΈ° λλ¬Έμ ν μ€νΈμ λ¬Έμ μ λ ν΄κ²°λλ€.
// DefaultDictionaryλ₯Ό ν
μ€νΈμ© dictionaryλΌκ³ κ°μ νμ
public class DefaultDictionary implements Dictionary{
@Override
public boolean contains(String word){
return false;
}
@Override
public List<String> closeWordsTo(String typo){
return null;
}
}
class SpellCheckerTest{
@Test
void isValid(){
SpellChecker spellChecker = new SpellChecker(new DefaultDictionary());
assertTrue(SpellChecker.isValid("test"));
}
}
[μ 리]
ν΄λμ€κ° λ΄λΆμ μΌλ‘ νλ μ΄μμ μμμ μμ‘΄νκ³ , κ·Έ μμμ΄ ν΄λμ€ λμμ μν₯μ μ€λ€λ©΄ μμ‘΄ κ°μ²΄ μ£Όμ μ μ¬μ©ν΄λ³΄μ. μ΄λ ν΄λμ€μ μ μ°μ±, μ¬μ¬μ©μ± κ·Έλ¦¬κ³ ν μ€νΈ μ©μ΄μ±μ κΈ°λ§νκ² κ°μ ν΄μ€ κ²μ΄λ€.
ν΄λΉ κΈμ λ°±κΈ°μ λμ 'μ΄νν°λΈ μλ° μλ²½ 곡λ΅'μ μκ°νκ³ μμ±ν κ²μ λλ€.