객체지향의 5대 원칙 SOLID : Liskov Substitution Principle

2023. 4. 29. 09:46·C#
반응형

Liskov Substitution Principle

Liskov Substitution Principle은 리스코프 치환 원칙으로, 서브타입은 언제나 자신의 기반 타입으로 교체 가능해야 한다는 원칙입니다. 이것은 상속을 사용할 때 하위 클래스가 상위 클래스의 기능을 대체할 수 있어야 한다는 것을 의미합니다.

Liskov Substitution Principle의 예

다음은 Liskov Substitution Principle의 예시입니다.

public class Rectangle
{
    public virtual double Width { get; set; }
    public virtual double Height { get; set; }

    public double Area()
    {
        return Width * Height;
    }
}

public class Square : Rectangle
{
    public override double Width
    {
        get { return base.Width; }
        set { base.Width = base.Height = value; }
    }

    public override double Height
    {
        get { return base.Height; }
        set { base.Width = base.Height = value; }
    }
}

위의 예제는 사각형과 정사각형을 구현하는 Rectangle 클래스와 Square 클래스를 보여줍니다. 정사각형은 사각형의 특수한 경우이므로 Square 클래스는 Rectangle 클래스를 상속합니다.

하지만, 이 구현은 Liskov Substitution Principle을 위배합니다. 이것은 Square 클래스의 Width와 Height를 변경하면 Area() 메소드가 예상대로 동작하지 않기 때문입니다. 예를 들어, 다음과 같이 코드를 작성한 경우입니다.

public void Resize(Rectangle r)
{
    if (r.Width > r.Height)
    {
        r.Height = r.Width;
    }
    else
    {
        r.Width = r.Height;
    }
}

이 경우, Resize() 메소드는 사각형의 너비와 높이를 비교하여 더 큰 값을 사용하여 사각형을 조정합니다. 그러나 이 메소드는 Square 객체에서는 예상대로 동작하지 않습니다. Square 객체에서는 Width와 Height가 항상 같아야 하지만, Resize() 메소드에서는 이러한 제약이 없으므로 Square 객체가 예상대로 동작하지 않습니다.

Liskov Substitution Principle의 장점

Liskov Substitution Principle을 지키면 하위 클래스가 상위 클래스의 기능을 대체할 수 있기 때문에 코드의 재사용성이 높아집니다. 또한, 코드의 가독성과 유지보수성도 개선됩니다.

결론

Liskov Substitution Principle은 서브타입이 언제나 자신의 기반 타입으로 교체 가능해야 한다는 객체지향의 5대 원칙 중 하나입니다. 이것은 상속을 사용할 때 하위 클래스가 상위 클래스의 기능을 대체할 수 있어야 한다는 것을 의미합니다. 이번 글을 통해 Liskov Substitution Principle에 대해 더욱 자세히 알아보았습니다.

참고자료

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

'C#' 카테고리의 다른 글

객체지향의 5대 원칙 SOLID : Dependency Inversion Principle  (1) 2023.05.01
객체지향의 5대 원칙 SOLID : Interface Segregation Principle  (0) 2023.04.30
객체지향의 5대 원칙 SOLID : Open-Closed Principle  (0) 2023.04.28
객체지향의 5대 원칙 SOLID : Single Responsibility Principle  (0) 2023.04.27
C# : System.String  (0) 2023.04.26
'C#' 카테고리의 다른 글
  • 객체지향의 5대 원칙 SOLID : Dependency Inversion Principle
  • 객체지향의 5대 원칙 SOLID : Interface Segregation Principle
  • 객체지향의 5대 원칙 SOLID : Open-Closed Principle
  • 객체지향의 5대 원칙 SOLID : Single Responsibility Principle
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (727) N
      • 스마트팜 (1) N
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (18) N
      • 일기장 (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)
  • 인기 글

  • 태그

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

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

티스토리툴바