1. 유연하지 않고 테스트하기 어렵다.
문제 : 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다.
해결방안 : 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식 = 클래스가 여러 자원 인스턴스를 지원해야 하며, 클라이언트가 원하는 자원을 사용해야 한다.
2. 유연성과 테스트 용이성을 높여준다.
의존 객체 주의 패턴 : 생성자에 필요한 자원을 넘겨주는 방식
- 자원이 몇 개든 의존 관계가 어떻든 상관없이 잘 작동한다.
- 불변(아이템 17)을 보장하여 (같은 자원을 사용하려는) 여러 클라이언트가 의존 객체들을 안심하고 공유할 수 있다.
- 아이템 17) 클래스를 불변으로 만드는 다섯 가지 규칙
- 1. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다.
- 2. 클래스를 확장할 수 없도록 한다.
- 3. 모든 필드를 final로 선언한다.
- 4. 모든 필드를 private으로 선언한다.
- 5. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다.
- 의존 객체 주입은 생성자, 정적 팩터리(아이템 1), 빌더(아이템 2) 모두에 똑같이 응용할 수 있다.
생성자에 자원 팩터리를 넘겨주는 방식으로 변형
팩터리란? 호출할 때마다 특정 타입의 인스턴스를 반복해서 만들어주는 객체 - 팩터리 메서드 패턴(Factory Method pattern)
Supplier< T > 인터페이스 = 팩터리
3. 의존 객체 주입 프레임워크
클래스의 유연성, 재사용성, 테스트 용이성을 개선해주는 장점이 있지만 큰 프로젝트에서는 코드를 어지럽힌다는 단점이 있다.
이를 보완하기 위해 프레임워크를 사용하자
- 대거(Dagger)
- 주스(Guice)
- 스프링(Spring)
'Dev Book > Effective Java' 카테고리의 다른 글
[Effective Java] item7. 다 쓴 객체 참조를 해제하라 (0) | 2024.08.09 |
---|---|
[Effective Java] item6. 불필요한 객체 생성을 피하라 (0) | 2024.08.08 |
[Effecive Java] item4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2024.08.07 |
[Effective Java] item3. private 생성자나 열거 타입으로 싱글턴임을 보장하라 (0) | 2024.08.06 |
[Effective Java] item2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2024.08.05 |