🤔 사용하는 자원에 따라 동작이 달라지는 클래스에는 어떤 방식이 적합할까?

이런 클래스를 정적 유틸리티 클래스로 구현해보면?

public class SpellChecker {
	private static final Lexicon dictionary = ...; // 정적으로 초기화
	
	private SpellChecker() {} // 객체 생성 방지
	
	public static boolean isValid(String word) { ... }
	public static List<String> suggestions(String typo) { ... }
}

⇒ 유연하지 않고 테스트하기 어려움!

싱글턴으로 구현해보면?

public class SpellChecker {
	private final Lexicon dictionary = ...;
	
	private SpellChecker(...) {}
	public static SpellChecker INSTANCE = new SpellChecker(...);
	
	public boolean isValid(String word) { ... }
	public List<String> suggestions(String typo) { ... }
}

⇒ 마찬가지로 유연하지 않고 테스트하기 어려움!!

즉, 두 방식 모두

😎 그렇다면 SpellChecker가 여러 사전을 사용할 수 있도록 만들어보자!

**클래스(SpellChecker)**가 여러 자원 인스턴스를 지원해야 하며, 클라이언트가 원하는 자원(dictionary)을 사용하게 하려면 어떻게 해야할까?

이 조건을 만족하는 간단한 패턴이 있다!