자원을직접 명시하지 말고 의존객체주입을 사용하라
많은클래스가 하나 이상의 자원에의존
정적유틸리티를 잘못 사용한 예시
public class SpellChecker{
private static final Lexicon dictonary=...;
private SpellChecker() {} //객체 생성방지
public static boolean isVaild(String word){...}
public static List<String>(String typo){...}
}
싱글턴을 잘못 사용한 예
public class SpellChecker {
private SpellChecker() {} //객체 생성방지
public static SpellChecker INSTANCE= new SpellChecker(...);
public static boolean isVaild(String word){...}
public static List<String>(String typo){...}
}
사용하는자원에따라 동작이 달라지는 클래스에는 정적
유틸리티 클래스나 싱글턴 방식이 적합하지않다
인스터스를 생성할때 생성자에 필요한 자원을 넘겨주는 방식
의존객체 주입--> 유연성과 테스트 용이성을 높여준다
의존객체 주입은 생성자, 정적팩터리에 모두 똑같이 응용할수있다
public class SpellChecker {
public final Lexion dictionary;
public SpellChecker(Lexion dictionary){
this.dictionary= Objects.requireNonNull(dictionary);
}
public static boolean isVaild(String word){...}
public static List<String>(String typo){...}
}
핵심정리
1. 클래스가 내부적으로 하나이상의 자원에의존하고 , 그자원이 클래스동작에 영향을 줄시 싱글턴, 정적유틸리티 사용은 안하는게좋다
2.자원들을 클래스가 직접 만들게 해서도 안됨
3.필요한자원들을 생성자에 넘겨줘야함.