객체지향의 5대 원칙 SOLID : Dependency Inversion Principle

2023. 5. 1. 12:47·C#
반응형

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 인터페이스를 참조하도록 코드를 변경해야 합니다. 이렇게 하면 고수준 모듈이 저수준 모듈과 직접적인 의존성을 가지지 않기 때문에 코드의 재사용성과 유지보수성이 개선됩니다.

참고자료

  • SOLID Design Principles Explained: Dependency Inversion Principle with Code Examples
저작자표시 비영리 변경금지 (새창열림)

'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
'C#' 카테고리의 다른 글
  • C# Nullable<T>
  • C#의 #region 지시어
  • 객체지향의 5대 원칙 SOLID : Interface Segregation Principle
  • 객체지향의 5대 원칙 SOLID : Liskov Substitution Principle
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    Python
    C#
    카페24리뷰
    파이썬
    programming101
    devlife
    유니티
    스마트스토어리뷰
    카페24리뷰이관
    상품 리뷰 크롤링
    리뷰관리
    스크립트 실행
    스크립트 실행 순서
    cv2
    programmerlife
    쇼핑몰리뷰
    리스트
    믈레코비타멸균우유
    appdevelopment
    unity
    codingtips
    learntocode
    list
    라떼우유
    ipcamera
    리뷰이관
    긴유통기한우유
    셀레니움
    codingcommunity
    rtsp
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
객체지향의 5대 원칙 SOLID : Dependency Inversion Principle
상단으로

티스토리툴바