NMP-Study / EffectiveJava2022

Effective Java Study 2022
5 stars 0 forks source link

아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 #5

Closed okhee closed 2 years ago

RulLu16 commented 2 years ago

자원을 사용하는 방식

정적 유틸리티 클래스 (#4)

코드 5-1 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다.

public class SpellChecker {
  private static final Lexicon dictionary ...; // 정적 자원

  private SpellChekcer() {} // 객체 생성 방지

  public static boolean isValid(String word) { ... }
  public static List<String> suggestions(String typo) { ... }

싱클턴 (#3)

코드 5-2 싱글턴을 잘못 하용한 예 - 유연하지 않고 테스트하기 어렵다.

public class SpellChecker {
  private final Lexicon dictionary ...;

  private SpellChekcer(...) {}
  public static SpellChecker INSTANCE = new SpellCHecker(...); // 싱글턴 자원

  public boolean isValid(String word) { ... }
  public List<String> suggestions(String typo) { ... }

개선

의존성 주입

코드 5-3 의존성 객체 주입은 유연성과 테스트 용이성을 높여준다.

public class SpellChecker {
  private final Lexicon dictionary ...;

  public SpellChekcer(Lexicon dictionary) { // 생성된 자원
    this.dictionary = Objects.requireNonNul(dictionary);
  }

  public static boolean isValid(String word) { ... }
  public static List<String> suggestions(String typo) { ... }

장점

발전(변형)

단점

bluewbear commented 2 years ago

https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/