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에 대해 더욱 자세히 알아보았습니다.
참고자료
'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 |