반응형
DIP(Dependency Inversion Principle) - 의존성 역전 원칙
DIP는 객체지향의 5대 원칙 중 하나로, 고수준 모듈은 저수준 모듈에 의존해서는 안 된다는 것을 의미합니다. 이것은 추상화를 이용하여 모듈 간의 의존성을 낮추는 것을 의미합니다.
DIP의 예시
DIP를 지키지 않은 코드는 다음과 같습니다.
public class Button
{
private Lamp lamp = new Lamp();
public void OnPressed()
{
lamp.TurnOn();
}
}
public class Lamp
{
public void TurnOn()
{
// ...
}
}
위의 예제에서는 Button 클래스가 Lamp 클래스에 의존하고 있습니다. 이것은 DIP를 위배하는 코드입니다. 이것은 고수준 모듈인 Button 클래스가 저수준 모듈인 Lamp 클래스에 의존하고 있기 때문입니다.
DIP를 지킨 코드는 다음과 같습니다.
public interface ISwitchable
{
void TurnOn();
}
public class Button
{
private readonly ISwitchable switchable;
public Button(ISwitchable switchable)
{
this.switchable = switchable;
}
public void OnPressed()
{
switchable.TurnOn();
}
}
public class Lamp : ISwitchable
{
public void TurnOn()
{
// ...
}
}
위의 예제에서는 Button 클래스가 ISwitchable 인터페이스에 의존하고 있습니다. 이것은 DIP를 지킨 코드입니다. 이것은 고수준 모듈인 Button 클래스가 저수준 모듈인 Lamp 클래스에 대한 의존성을 추상화한 ISwitchable 인터페이스에 의존하고 있기 때문입니다.
DIP의 장점
DIP를 지키면 고수준 모듈과 저수준 모듈 간의 의존성이 낮아지므로, 코드의 재사용성과 유지보수성이 개선됩니다.
DIP에 대한 블로그 글
DIP는 고수준 모듈이 저수준 모듈에 의존해서는 안 된다는 것을 의미합니다. 이것은 추상화를 이용하여 모듈 간의 의존성을 낮추는 것을 의미합니다.
예를 들어, Button 클래스가 Lamp 클래스에 의존하는 경우, Button 클래스가 Lamp 클래스를 직접 참조하는 것이 아니라, ISwitchable 인터페이스를 참조하도록 코드를 변경해야 합니다. 이렇게 하면 고수준 모듈이 저수준 모듈과 직접적인 의존성을 가지지 않기 때문에 코드의 재사용성과 유지보수성이 개선됩니다.
참고자료
'C#' 카테고리의 다른 글
C# Nullable<T> (0) | 2023.05.14 |
---|---|
C#의 #region 지시어 (0) | 2023.05.08 |
객체지향의 5대 원칙 SOLID : Interface Segregation Principle (0) | 2023.04.30 |
객체지향의 5대 원칙 SOLID : Liskov Substitution Principle (0) | 2023.04.29 |
객체지향의 5대 원칙 SOLID : Open-Closed Principle (0) | 2023.04.28 |