프로젝트를 하며 필요한 객체의 의존성 주입을 해야한다.
의존성 주입 방식에는 필드 주입, 수정자 주입, 생성자 주입 3가지 방식이 있다.
필드 주입은 아주 깔끔하다.
딱 보면 클린 코드 그 자체로 보이지 않는가?
하지만 우리의 인텔리제이님은 추천하지 않는다고 저렇게 줄을 그어놨다.
의존성 주입이라는 건 불변해야하는데 초기화가 되지 않아 final 선언이 불가하다.
결국 언제든 변할 수 있는 상태라는 의미이기 때문에 좋지 않은 코드이다.
또한 저 boardSvcImpl 변수는 BoardController에 종속되어 있기 때문에 결합도가 높고
이는 테스트 코드를 짜고자 할 때 BoardController를 컴파일해서 스프링 컨테이터에 올려야하는 불편함이 있다.
나는 boardSvcImpl만 테스트하고 싶은데 BoardController까지 불러와야한다.
수정자 주입은 어떨까?
외부에서 의존성을 넣어주니 결합도는 낮아졌지만 근본적인 문제인 불변성을 지키지 못한다.
* 외부에서 접근이 가능하도록 public이 필수
대망의 생성자 주입
불변성 문제가 아주 깔끔하게 해결되었다.
처음 어플리케이션이 실행될 때 의존성이 모두 주입되고 이는 어플리케이션이 종료될 때까지 변하지 않는다.
또한 생성자에서만 값을 세팅할 수 있고 final 키워드를 사용할 수 있기 때문에 하기 이미지 처럼 혹시나 생성자에서 값이 세팅 되지 않았을 경우를 방지할 수 있다.
* 필드 주입, 수정자 주입 둘 다 생성자 이후 호출되기 때문에 final 키워드 사용 불가
'프로젝트 > 게시판 0부터 10까지' 카테고리의 다른 글
[게시판] 글 조회 (@PathVariable) (0) | 2022.09.13 |
---|---|
[게시판] 글쓰기 (0) | 2022.09.08 |
[게시판] 글 목록 조회 (0) | 2022.09.05 |
스프링 부트 인텔리제이 기본 필요 세팅 (0) | 2022.09.02 |
스프링 부트 프로젝트 생성 (0) | 2022.09.02 |