Constructor-based Dependency Injection이 선호 되는 이유

스프링을 처음 공부하며 배운 것 중 하나는는 Constructor-based DI를 지향해야 한다는 것이다. 이는 내가 톡 서버에 들어 갔을 때 나를 가르쳐 주신 시니어들이 권장하는 방법이기도 하고, 스프링에서 공식적으로 권장하는 방식이다.

스프링에서 DI를 하는 방법은 세 가지가 있다.

  • Contructor base
  • Setter base
  • Annotaion base

이 중 Constructor base를 지향해야 하는 이유를 몇 가지 짚어보면,

스프링과의 의존성을 줄일 수 있다.

  • 특정 프레임워크와의 의존성을 줄이는 것은 그 자체로 프로젝트의 장기 유지보수를 위해 의미 있는 일이다.
  • 특히 유닛 테스트를 작성하는데 있어서 훨씬 효과적이다. 스프링의 도움을 받아 DI를 하면 테스트를 할 때도 무거운 스프링 프레임워크를 구동해야 하고, mocking 하기도 어렵다.

객체 불변식을 지킬 수 있다.

  • Setter 기반의 주입을 하려면 해당 필드를 final 선언할 수도 없고, 그렇다면 나중에 코드의 어디선가 그 필드를 변경 시킬 수 있다.

Null safe 해진다.

  • 일반 클래스 안에 빈을 오토와이어링 하려는데 그런 빈이 없다면? null이 들어간다. 이는 당연히 NPE로 이어진다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

search previous next tag category expand menu location phone mail time cart zoom edit close