"인터페이스에 대한 프로그램"은 작업을 수행하기 위해 구체적인 유형에 의존 하지 않지만 의존성을 얻는 방법 을 지정하지는 않습니다 .
"종속성 역전 원리 (Dependency Inversion Principle)"는 객체가 의존성 생성을 제어해서는 안되며, 필요한 의존성을 알리고 호출자가이를 제공하게한다고 말합니다 . 그러나 종속성이 구체적 유형인지 인터페이스인지 지정하지 않습니다.
C # 코드와의 차이점을 설명하겠습니다.
다음 예제는 구체적 유형에 따라 다르며 자체 종속성 생성을 제어합니다. "인터페이스에 대한 프로그램"이나 "종속성 반전"을 따르지 않습니다 .
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor()
{
_myThing = new MyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
다음 예제는 인터페이스에 따라 다르지만 자체 종속성 생성을 제어합니다. "인터페이스 프로그램"을 따르지만 "종속성 반전"은 아닙니다.
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor()
{
_myThing = ThingFactory.GiveMeANewMyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
다음 예제는 구체적 유형에 따라 다르지만 종속성을 작성하여 전달하도록 요청합니다. "종속성 반전"을 따르지만 "인터페이스에 대한 프로그램"은 아닙니다.
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor(MyThing myThing)
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}
다음 예제는 인터페이스에 따라 다르며 인터페이스의 종속성을 작성하여 전달하도록 요청합니다. "종속성 반전" 및 "인터페이스에 대한 프로그램 "을 모두 따릅니다 .
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor(IMyThing myThing) // using an interface
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}