인프런 커뮤니티 질문&답변

박호정님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

06-08 DI / IoC

의존성주입으로 발생하는 장점 설명 질문

해결된 질문

작성

·

427

·

수정됨

0

발생하는 장점을 다음과 같이 설명해주셨는데요.
1. new 한 번으로 모든 곳에서 재사용 가능
2. 의존성 주입으로 몽땅 한꺼번에 변경 가능

다음과 같은 예시를 들어주셨는데, ProductController의 constructor에서 this.cashService = new CashService()
와 같은 사용을 하면 constructor에서 변경점을 가져가고 해당 클래스의 모든 함수에서는 this.cashService를 통해 사용할 수 있고요.
class ProductController {
cashService
constructor() {
this.cashService = new CashService()
}
}



CashService 대신 CashService2로 변경하고 싶을때는 다음처럼 변경하면 2번 장점도 동일해지구요.
class ProductController {
cashService
constructor() {
//this.cashService = new CashService()
this.cashService = new CashService2()
}
}

의존성 주입을 통해 얻을 수 있는 이점은 위와 같은 재사용이나 변경에 대한 장점보다도 말 그래도 의존성을 없애는 것에 있다고 보는데요.
의존성 주입을 통해 ProductController에서 구현체인 CashService에 대한 의존성을 없애고, 외부에서 CashService에 대한 의존성을 가져갈 수 있게 되니까요.
CashService에 대한 코드의 변경으로 인한 ProductController의 코드 변경이 발생하지 않도록 하는 것이 의존성 주입의 핵심이라고 보는데, tight-coupling을 왜 loose-coupling으로 변경해주어야 하는지에 대한 설명은 없었던 거 같아서요. 이 부분에 대해 어떻게 생각하시는지 궁금합니다!

답변 2

1

박호정님의 프로필 이미지
박호정
질문자

강사님 설명 감사합니다! 후반부 설명(57~00분)에서 설명해주시는 맥락에서 좀더 구체적으로 설명을 기대했던 거 같습니다!

유지보수에 굉장히 중요한 부분이라고 생각되는데 후반부 테스트 강의도 들어보겠습니다 감사합니다 :)

노원두님의 프로필 이미지
노원두
지식공유자

네! 호정님!

추후 강의 업데이트 기획중에 있는데 반영해 볼게요!

피드백 감사합니다!^^

1

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 호정님!

의존성 주입에 대해서 완벽하게 이해하고 계시군요!
말씀하신 내용이 정확히 모두 맞습니다!
의존성 주입에서의 핵심강하게 결합되는 녀석을 느슨하게 풀어주는 부분입니다!

해당 강의에서 역시 마찬가지로 실습을 통해서 진행하고 있는데, 57분 ~ 00분 사이에 소스코드 변경 없이 로직을 체인지하는 과정에 대한 내용을 학습하실 수 있습니다!!
(물론, 여기서 소스코드란 Controller이며, 왜 index는 수정되도 되는지에 대한 이야기도 포함되어 있어요!)

현재 수준에서는 현금서비스를 쿠폰서비스로 변경하는 정도(추가 학습 자료로 SOLID OCP원칙을 추천드립니다)로 진행하고 있지만, 사실 가장 많이 쓰이는 부분은 마지막 후반부 강의에서 나오는 테스트코드 부분이랍니다!

왜냐면, 1)실제DB에 접근하는 서비스, 2)테스트DB에 접근하는 서비스를 만들고, 컨트롤러 변경 없이 해당 서비스를 바꿔치기 해줌으로써 실서비스와 테스트서비스를 분기할 수 있기 때문이에요!
이 부분은 뒷부분에서 다시 언급됩니다!