의존성 주입 (Dependency Injection, DI)
의존성 주입은 객체 지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 객체의 의존성을 해당 객체가 아닌 외부에서 주입받도록 하는 패턴입니다.
이러한 접근 방식을 통해 모듈 간의 결합도를 낮추고 코드의 재사용성과 테스트 용이성을 높일 수 있습니다.
핵심 개념
- 의존성 (Dependency)
- 하나의 객체가 다른 객체의 기능을 사용할 때, 해당 객체에 대한 의존성이 생깁니다.
예를 들어,OrderService
클래스가OrderRepository
클래스의 기능을 사용하면,OrderService
는OrderRepository
에 의존하게 됩니다.
- 하나의 객체가 다른 객체의 기능을 사용할 때, 해당 객체에 대한 의존성이 생깁니다.
- 주입 (Injection)
- 객체에 필요한 의존성을 외부에서 제공하는 과정을 의미합니다.
이는 생성자, 세터 메서드, 프로퍼티 등 다양한 방식으로 구현될 수 있습니다.
- 객체에 필요한 의존성을 외부에서 제공하는 과정을 의미합니다.
장점
- 모듈 간의 낮은 결합도
- 의존성 주입을 사용하면 객체가 직접적으로 특정 구현에 의존하지 않게 되므로, 코드의 결합도가 낮아집니다.
- 코드의 재사용성
- 객체가 특정 구현에 직접적으로 의존하지 않기 때문에, 해당 객체를 다른 상황에서도 쉽게 재사용할 수 있습니다.
- 테스트 용이성
- 의존성을 주입받는 객체는 모의 객체(mock)나 가짜 객체(stub)를 사용하여 쉽게 테스트할 수 있습니다.
- 유연성
- 의존성 주입을 사용하면, 실행 시간에 객체의 의존성을 변경하거나 다른 구현을 사용하는 것이 쉬워집니다.
예제
예를 들어, OrderService
가 OrderRepository
의 특정 구현에 의존하는 대신, 인터페이스를 통해 의존성을 주입받도록 설계할 수 있습니다:
public interface IOrderRepository
{
void Save(Order order);
}
public class OrderRepository : IOrderRepository
{
// ...
public void Save(Order order)
{
// Implementation here...
}
}
public class OrderService
{
private readonly IOrderRepository _repository;
public OrderService(IOrderRepository repository)
{
_repository = repository;
}
// ...
}
이렇게 설계하면, OrderService는 OrderRepository의 특정 구현에 직접적으로 의존하지 않게 되므로, 다른 OrderRepository의 구현을 쉽게 교체할 수 있습니다.
반응형
'Programming > Blah Blah' 카테고리의 다른 글
Domain Driven Design (0) | 2021.10.04 |
---|---|
Kinematica 캐릭터 모션 매칭(Motion Matching) (0) | 2021.06.29 |
Voxelization (0) | 2021.02.21 |
Clipmaps (0) | 2021.01.27 |
스피드핵(SpeedHack) 검증 (0) | 2020.01.21 |
애니메이션 자료 메모 (0) | 2019.12.30 |
행동 트리(Behavior Tree) (0) | 2019.12.07 |
C# 프로젝트 관리 툴? (0) | 2019.11.16 |