DI (Dependency Injection) 란?
하나의 객체가 다른 객체를 필요로 할 때(의존성을 가진다), 객체를 클래스 내부에서 직접 생성하여 사용하지 않고, 외부에서 생성해 놓은 객체를 사용(주입)하여 결합도를 낮추는 것.
DI의 장점
- 결합도 감소: 객체 간의 의존성이 명시적으로 주입되어, 객체들이 직접적으로 결합되지 않아 결합도가 낮아짐.
- 유연성 및 재사용성 증가: 의존성 주입을 통해 객체의 구성 요소를 쉽게 교체하거나 재사용할 가능
- 테스트 용이성: 의존성을 외부에서 주입받기 때문에, 모의 객체(Mock Object)나 테스트 더블(Test Double)을 사용하여 단위 테스트를 쉽게 작성 가능
- 유지 보수성 향상: 의존성이 명확하게 드러나고 관리되므로, 코드의 가독성과 유지보수성 향상
Python DI 주입 예시
class Service:
def perform_action(self):
print("Action performed")
class Client:
# 방법 1 - 생성자
def __init__(self, service: Service):
self.service = service
# 방법 2 - setter
def set_service(self, service: Service):
self.service = service
def do_work(self):
self.service.perform_action()
# 방법 1 - 생성자
service = Service()
client = Client(service)
client.do_work()
# 방법 2 - setter
service = Service()
client = Client()
client.set_service(service)
client.do_work()
service layer 에서의 DI
비즈니스 로직을 작성하여 service layer로 분리 하곤 하는데, service layer를 잘 분리하면, main 의 코드에서 위의 예시 같이, 결합도를 잘 낮추어 사용 가능하다.
'소프트웨어 개발자 > SW 개발론' 카테고리의 다른 글
[SW 개발] 소프트웨어 버저닝 방법 (0) | 2023.04.04 |
---|---|
[클린코드] SOLID 객체 지향 설계 원칙 (0) | 2022.09.12 |
[SW 개발] 테스트 중심의 개발 TDD (with. Unit, E2E, Integration) (0) | 2022.08.25 |
[SW 개발] MSA vs 모놀리식 (0) | 2022.08.24 |
[SW 개발] Agile, Scrum, Sprint, Waterfall (0) | 2022.08.22 |