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

최대 1 분 소요

들어가며

의존 객체 주입을 알아보기 위한 포스팅이며 해당 게시글은 인프런 백기선 강사님의 이펙티브 자바 완벽 공략 1부 강의를 바탕으로 쓰였음을 미리 밝힙니다.

의존 객체 주입

  • 클래스 내부에서 직접 자원을 명시하는 경우 코드의 재사용성이 떨어지고 테스트의 비용이 증가한다.
  • 인터페이스의 다형성과 생성자를 통한 의존 객체 주입을 이용하면 코드의 재사용성이 증가한다.
  • 인터페이스를 구현한 다양한 객체의 주입으로 유연성이 증가하고 목객체를 통한 테스트가 가능해진다.

팩토리 메서드

  • 단순히 구현 객체를 주입받는 것이 아니라 한 번 더 추상화해서 객체를 반환하는 팩토리 메서드를 주입받을수 있다.
  • 팩토리 메서드를 인터페이스로 추상화한다면 클라이언트는 코드의 변경 없이 팩토리 내지 팩토리에서 반환하는 객체를 확장할 수 있다.
  • 또한 팩토리 메서드 패턴을 통해 객체 생성이 복잡한 경우 이를 단일화 할 수 있고 다양한 객체를 반환할 수 있다는 장점도 있다.
  • 함수형 인터페이스인 Supplier를 구현한 람다식 또는 메서드 참조를 생성자의 매개변수로 넘겨줄 수도 있다.
SpellChecker spellChecker1 = new SpellChecker(MockDictionary::new);
SpellChecker spellChecker2 = new SpellChecker(DictionaryFactory::get);
  • 또한 한정적 와일드카드를 이용하여 제네릭 형변환을 통한 매개변수의 다형성을 이용할 수도 있다. 하지만 어차피 인터페이스를 구현한 객체의 경우 인터페이스의 다형성을 이용하면 된다.

댓글남기기