Posts [이펙티브자바] 아이템5-자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
Post
Cancel

[이펙티브자바] 아이템5-자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

  • 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스가 싱글턴 방식이 적합하지 않다.

  • 클래스가 여러 자원 인스턴스를 지원해야 하며 자원에 따라 동작이 달라지는 경우엔 의존 객체 주입을 사용할 수 있다.
  • 이는 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다.

의존 객체 주입의 장점

  • 불변(아이템17)을 보장하여 여러 클라이언트가 의존 객체들을 안심하고 공유할 수 있기도 하다.
  • 생성자, 정적 팩터리(아이템1), 빌더(아이템2) 모두에 똑같이 응용할 수 있다.
  • 유연성과 테스트 용이성을 높여준다.
    • 만약 새로운 자원의 형태가 필요하다면 규격에 맞는 자원만 정의해서 주입해주면 되고, 테스트 코드 작성시에 유연하게 주입하여 테스트하기 편하도록 해준다.
  • 그리고 다음과 같이 Supplier 를 통해 팩터리 메서드를 제공하여 넘겨 줄 수 도 있다.
    • 클라이언트가 제공한 팩터리가 생성한 타일(Tile)들로 구성된 모자이크(Mosaic)를 만드는 메서드다.
1
Mosaic create(Supplier<? extends Tile>tileFactory) { ... }
  • 그래서 정리해보면 의존 객체 주입은 클래스의 유연성, 재사용성, 테스트 용이성 을 기막히게 개선해준다.
This post is licensed under CC BY 4.0 by the author.

[이펙티브자바] 아이템4-인스턴스화를 막으려거든 private 생성자를 사용하라

[이펙티브자바] 아이템6-불필요한 객체 생성을 피하라