소프트웨어 개발자/SW 개발론
[SW 개발] 의존성 주입 (DI, Dependency Injection)
yubi5050
2024. 7. 6. 16:17
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 의 코드에서 위의 예시 같이, 결합도를 잘 낮추어 사용 가능하다.