Home [Effective Java] Item05. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라!
Post
Cancel

[Effective Java] Item05. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라!

Item05. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라!

여러 자원에 의존하는 경우, 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다❗️

  • 정적 유틸리티 클래스나 싱글턴 방식으로 작성된 코드에서 사용하고 있는 자원을 변경할 때 오류를 내기 쉬우며 멀티스레드 환경을 대응할 수 없다.

인스턴스를 생성할 때 필요한 자원을 넘겨주자❗️

  • 한 클래스가 여러 자원 인스턴스를 지원하고, 클라이언트가 원하는 자원을 사용할 수 있도록 한다.
  • 의존 객체 주입의 한 형태로, 생성자로 객체 생성 시 의존 객체인 자원을 주입해주는 패턴이다.
1
2
3
4
5
6
7
8
9
10
11
// 의존 객체 주입으로 유연성과 테스트의 용이성을 높인 형태
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) {....}
}
  • 의존 객체 주입 패턴은 자원의 개수나 의존 관계에 상관없이 잘 동작한다.
  • 불변을 보장하여 같은 자원을 사용하려는 여러 클라이언트가 의존 객체를 안심하고 사용하는 것이 가능하다.
  • 의존 객체 주입 패턴은 생성자, 정적 팩터리, 빌더 모두에 응용 가능하다.

생성자에 자원 팩터리를 넘겨주자❗️

  • 팩터리란? 호출할 때마다 특정 타입의 인스턴스를 반복해서 만들어주는 객체
  • 자원 팩터리를 넘겨줘 객체를 주입하는 패턴을 팩터리 메서드 패턴이라 한다.
1
2
// (명시한 Tile 타입 하위 타입이라면 무엇이든 생성 가능한 tileFactory로 생성된) Tile을 넘겨 Mosaic를 만드는 메서드
Mosaic create(Supplier<? extends Tile> tileFactory) {....}
This post is licensed under younghwani by the author.

[Effective Java] Item04. 인스턴스화를 막으려거든 private 생성자를 사용하라!

[Effective Java] Item06. 불필요한 객체 생성을 피라하!

Comments powered by Disqus.