jinsusong / CS-Study

CS
3 stars 5 forks source link

의존성 주입(DI)의 방법 #117

Open dupyo opened 1 year ago

SW-H commented 1 year ago

의존적인 객체를 직접 생성하거나 제어하는 것이 아니라, 제어의 역행으로 특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것

[Java Spring] 종류 : 필드 주입, setter 주입,

dupyo commented 1 year ago

어떤 주입 방식을 사용하는게 좋을까?

Spring Framwork reference에서 권장하는 방법은 생성자를 통한 주입입니다.

생성자 주입을 권장하는 이유

  1. 순환 참조를 방지할 수 있다.

    • 생성자를 통해 주입하고 실행하면 BeanCurrentlyInCreationException이 발생하게 됩니다.
    • 순환 참조 뿐만아니라 더 나아가서 의존 관계에 내용을 외부로 노출 시킴으로써 어플리케이션을 실행하는 시점에서 오류를 체크할 수 있습니다.
  2. 불변성(Immutability)

    • 생성자로 의존성을 주입할 때 final로 선언할 수 있고, 이로인해 런타임에서 의존성을 주입받는 객체가 변할 일이 없어지게 됩니다.
    • 하지만 수정자 주입이나 일반 메소드 주입을 이용하게되면 불필요하게 수정의 가능성을 열어두게 되고,
    • 이는 OOP의 5가지 원칙 중 OCP(Open-Closed Principal, 개방-폐쇄의 원칙)를 위반하게 됩니다.
    • 그러므로 생성자 주입을 통해 변경의 가능성을 배제하고 불변성을 보장하는 것이 좋습니다.
  3. 테스트에 용이하다.

    • 독립적으로 인스턴스화가 가능한 POJO(Plain Old Java Object)를 사용하면, DI 컨테이너 없이도 의존성을 주입하여 사용할 수 있습니다.
    • 이를 통해 코드 가독성이 높아지며, 유지보수가 용이하고 테스트의 격리성과 예측 가능성을 높일 수 있다는 장점이 생기게 됩니다.
    • 위와 같은 이유로 필드 주입이나 수정자 주입 보다는 생성자 주입의 사용을 권장합니다.

출처 : https://dev-coco.tistory.com/70

developer-sora commented 1 year ago

JavaScript 의존성 역전 원칙, 의존성 주입 https://kagrin97-blog.vercel.app/js/%EC%9D%98%EC%A1%B4%EC%84%B12%EA%B0%80%EC%A7%80(Dependency)