[ASP.NET MVC]Dependency Injection 개념

Posted by 알 수 없는 사용자
2015. 8. 2. 13:45 프로그래밍/.NET

Dependency Injection(의존성 주입, 줄여서 DI)에 대해 알아보자.

MVC 패턴에서 관심사를 분리할 수 있다는 특징이 있는데 각 구성요소들끼리 의존관계를 줄이는 것이 좋고 

DI는 이러한 느슨한 결합(Loose Coupling)을 가능하게 하는 디자인 패턴이다.

Dependency InjectionI의 이점은 다음과 같다.

1. 클래스간 결합도 감소한다.

2. 코드 재사용성 증가한다.

3. 코드의 유지보수 용이하다.

4. 단위 테스트 용이하다.


이제 신발가게에서 신발을 주문하면 공장에서 만드는 시나리오를 나타낸 코드를 살펴보자.


Shoes.class (신발 정보를 나타내는 신발 클래스)


IShoesFactory.interface (신발공장 인터페이스)


NShoes.class (인터페이스를 상속받은 NShoes 클래스)


AShoes.class (인터페이스를 상속받은 AShoes 클래스)


ShoesStore.class (신발가게 클래스)


Main


위의 코드에서 ShoesStore.class 와 NShoes.class, AShoes.class간에 의존성을 맺고 있다.
만약 새로운 공장(LShoes)에서 만든 신발을 주문하려고 하면 어떻게 해야할까? 또 다른공장이 계속 생기거나 문을 닫게 되면 어떻게 될까?
우선 LShoes.class를 만들고 ShoesStore.class를 수정해야 하고 추가로 다른공장이 생기거나 없어지면 ShoesStore.class에 추가, 삭제를 해야한다.
공장이 생기거나 없어지면 Store.class가 무조건 수정되어야 한다.(물론 공장이 문닫는다고 해서 ShoesStore.class를 수정하지 않는다고 동작에 이상은 없을 것이다...)
이를 해결하기 위해 ShoesStore.class와 Main함수를 수정해 보자.


ShoesStore.class


Main


ShoesStore.class에서는 어떤 신발공장인지 상관없이 shoesFactory.MakeShoes()만 실행하고 있다. 
신발을 주문할 떄 인터페이스를 통해 신발제작을 요청 하여 의존성을 낮추고 main에서는 ShoesStore와 신발공장들(NShoes, AShoes)간에 의존성이 필요할 때
각각에 맞춰 의존성을 주입하고 있다.
이럴 경우 신발공장이 아무리 추가되거나 문을 닫게 되더라도 ShoesStore의 수정은 할 필요가 없게 된다.



참고사이트