[Java] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
들어가며
의존 객체 주입을 알아보기 위한 포스팅이며 해당 게시글은 인프런 백기선 강사님의 이펙티브 자바 완벽 공략 1부 강의를 바탕으로 쓰였음을 미리 밝힙니다.
의존 객체 주입
- 클래스 내부에서 직접 자원을 명시하는 경우 코드의 재사용성이 떨어지고 테스트의 비용이 증가한다.
- 인터페이스의 다형성과 생성자를 통한 의존 객체 주입을 이용하면 코드의 재사용성이 증가한다.
- 인터페이스를 구현한 다양한 객체의 주입으로 유연성이 증가하고 목객체를 통한 테스트가 가능해진다.
팩토리 메서드
- 단순히 구현 객체를 주입받는 것이 아니라 한 번 더 추상화해서 객체를 반환하는 팩토리 메서드를 주입받을수 있다.
- 팩토리 메서드를 인터페이스로 추상화한다면 클라이언트는 코드의 변경 없이 팩토리 내지 팩토리에서 반환하는 객체를 확장할 수 있다.
- 또한 팩토리 메서드 패턴을 통해 객체 생성이 복잡한 경우 이를 단일화 할 수 있고 다양한 객체를 반환할 수 있다는 장점도 있다.
- 함수형 인터페이스인
Supplier
를 구현한 람다식 또는 메서드 참조를 생성자의 매개변수로 넘겨줄 수도 있다.
SpellChecker spellChecker1 = new SpellChecker(MockDictionary::new);
SpellChecker spellChecker2 = new SpellChecker(DictionaryFactory::get);
- 또한 한정적 와일드카드를 이용하여 제네릭 형변환을 통한 매개변수의 다형성을 이용할 수도 있다. 하지만 어차피 인터페이스를 구현한 객체의 경우 인터페이스의 다형성을 이용하면 된다.
댓글남기기