요약
많은 클래스가 하나 이상의 자원에 의존하는 상황을 고려해보자
예를 들어, 맞춤법을 확인해주는 클래스는 여러가지 단어가 존재하고 언어가 여럿 존재하기에 하나의 인스턴스를 만들어 사용하는 정적 유틸리티 방식이나 싱글턴 방식을 사용하면 해당 경우에서 유연한 사용이 불가능하다.
예를 들어, 하나의 사전 인스턴스를 만들어놓고 이를 활용해 맞춤법을 확인해주는 클래스는 유연하지 못한 것이다.
즉, 사용하는 자원에 따라 동작이 달라지는 클래스는 정적 유틸리티 클래스나 싱글턴으로 사용하기에 적합하지 않다.
의존 객체 주입 방식
이러한 경우에는 해당 클래스(맞춤법 클래스)에 대한 인스턴스를 생성할 때, 생성자를 통해 필요한 자원(사전 클래스)를 넘겨주는 방법이 가장 적합하다.
public class spellChecker{
private final Lexion dictionary;
public spellChecker(Lexion dictionary){
this.dictionary = Objects.requireNotNull(dictionary);
}
}
장점
- 사용하고자 하는 자원이 많든 적든 동작이 잘 된다.
- 또한 불변을 보장하여 여러 클라이언트가 의존 객체들을 공유가 가능하다.
생성자에 자원 팩터리를 넘겨주는 방식
팩터리 : 호출할 때마다 특정타입의 인스턴스를 반복해서 만들어주는 객체, 팩터리 메서드 패턴을 구현, ex) Supplier<T> 인터페이스
Supplier<Lexion> dictionary = new Supplier<Lexion>() {
@Override
public Lexion get(){
return new englishDictionary;
}
}
Supplier<T> 인터페이스
- 해당 인터페이스는 get메서드를 구현한 함수형 인터페이스이다.
- 주로, 매개변수를 받지않고 제네릭 타입 T의 값을 반환한다.
코드 정리
https://github.com/mokjaemin/EffectiveJAVA
'Language > Java Plus' 카테고리의 다른 글
Effective JAVA - Item7 : 다 쓴 객체 참조를 해제하라 (0) | 2023.09.12 |
---|---|
Effective JAVA - Item6 : 불필요한 객체 생성을 피하라. (0) | 2023.09.12 |
Effective JAVA - Item4 : 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2023.06.10 |
Effective JAVA - Item3 : private 생성자나 열거 타입으로 싱클턴임을 보증하라. (0) | 2023.06.07 |
Effective JAVA - Item2 : 생성자에 매개변수가 많다면 빌더를 고려하라. (0) | 2023.06.02 |