DI

BuZZLightyear·2023년 4월 1일
0

정리

목록 보기
43/47

DI : 객체 관의 관계를 느슨하게 하는 방법

특징

  • 클래스의 내부에서 다른 클래스의 객체를 생성 하게 되면 두 클래스간의 의존 관계가 성립 된다.
  • 클래스 내부에서 new를 사용해 참조할 객체를 직접 생성 하지 않고, 생성자 등을 통해서 외부에서 다른 클래스의 객체를 전달 받고 있다면 의존성 주입이 이루어 지고 있는 것이다.
  • new 키워드를 사용하여 객체를 생성할 때, 클래스 간에 강하게 결합(Tight Coupling)되어 있다고 한다.
  • 어떤 클래스가 인터페이스 같이 일반화 된 구성 요소에 의존하고 있을 때, 클래스들 간에 느슨하게 결합(Loose Coupling)되어 있다고 한다.
  • 객체들 간의 느슨한 결합은 요구 사항의 변경에 유연하게 대처할 수 있도록 해준다.
  • 의존성 주입(DI)은 클래스들 간의 강한 결합을 느슨한 결합으로 만들어준다.
  • Spring에서는 애플리케이션 코드에서 이루어지는 의존성 주입(DI)을 Spring에서 대신 해준다.





MenuController클래스내부에 MenuService 인터페이스를 생성하고 생성자 파라미터로 인터페이스를 넣고 MenuController의 메서드 getMenus 에 반환값을 MenuService 인터페이스의 메서드 getMenuList로 함으로써 MenuController가 MenuService 인터페이스를 의존하게 되었다.
AppConfigure 클래스에 menuController라는 메서드를 만들고 반환값을 menuServiceStub메서드를 파라미터로 가지는 MenuController 객체를 반환 하기 때문에 CafeClient에서 AppConfigure 를 인스턴스화 한 후 appConfigure.menuController()를 이용해 controller에 담고 controller.getMenus()로 menuList에 메뉴 목록을 담았다.
이렇게 DI를 했을 때 장점은 메뉴 수정사항이나 추가 사항이 생겼을 때 전부 이름을 바꿔 줄 필요 없이 수정사항만 건드려도 메서드가 객체를 반환 하기 때문에 따로 이름을 바꿀 필요가 없다.

DI를 잘 활용해야 한다고 들었다. 직접 사용해보니 DI를 적용하기전과 후의 수정하는 방면에서의 편리성이 엄청 큰 차이가 나는거 같다. 물론 아직은 적응이 잘 안돼서 힘들긴 하지만 계속 연습하면서 익숙해 져야 할 것 같다.

profile
버즈라이트이어

0개의 댓글