코샵
끄적끄적 코딩 공방
코샵

인기 글

  • 분류 전체보기 (479) N
    • MongoDB (4)
    • 일기장 (4)
    • Unity (138)
      • Tip (41)
      • Project (1)
      • Design Pattern (8)
      • Firebase (6)
      • Asset (2)
    • 파이썬 (127)
      • Basic (40)
      • OpenCV (8)
      • Pandas (15)
      • PyQT (3)
      • SBC(Single Board Computer) (1)
      • 크롤링 (14)
      • Fast API (29)
      • Package (6)
    • Linux (4)
    • C# (97)
      • Algorithm (11)
      • Window (7)
    • TypeScript (48) N
      • CSS (10) N
    • Git (11)
    • SQL (5)
    • Flutter (10)
      • Tip (1)
    • System (1)
    • BaekJoon (6)
    • Portfolio (2)
    • MacOS (1)
    • 유틸리티 (1)
    • 서비스 (6)
    • 자동화 (3)
    • Hobby (10)
      • 물생활 (10)
      • 식집사 (0)
전체 방문자
오늘
어제

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.
코샵

끄적끄적 코딩 공방

C#

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

2023. 4. 29. 09:46
반응형

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  (0) 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
    코샵
    코샵
    나의 코딩 일기장

    티스토리툴바