이펙티브자바 아이템5- 의존객체주입

한주영·2023년 9월 22일
0

이펙티브자바

목록 보기
5/33

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

많은클래스가 하나 이상의 자원에의존

정적유틸리티를 잘못 사용한 예시

public class SpellChecker{
     
     private static final Lexicon dictonary=...;
     
    private SpellChecker() {} //객체 생성방지
    
    public static boolean isVaild(String word){...}
    public static List<String>(String typo){...}
     
     }

싱글턴을 잘못 사용한 예

public class SpellChecker {


    private SpellChecker() {} //객체 생성방지
    public static SpellChecker INSTANCE= new SpellChecker(...);

    public static boolean isVaild(String word){...}
    public static List<String>(String typo){...}
}

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

인스터스를 생성할때 생성자에 필요한 자원을 넘겨주는 방식

의존객체 주입--> 유연성과 테스트 용이성을 높여준다
의존객체 주입은 생성자, 정적팩터리에 모두 똑같이 응용할수있다

public class SpellChecker {
    
    public final Lexion dictionary; 
    
    public SpellChecker(Lexion dictionary){
        this.dictionary= Objects.requireNonNull(dictionary);
    } 
    
    public static boolean isVaild(String word){...}
    public static List<String>(String typo){...}
}

핵심정리
1. 클래스가 내부적으로 하나이상의 자원에의존하고 , 그자원이 클래스동작에 영향을 줄시 싱글턴, 정적유틸리티 사용은 안하는게좋다
2.자원들을 클래스가 직접 만들게 해서도 안됨
3.필요한자원들을 생성자에 넘겨줘야함.

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글