개폐 원리
Objects or entities should be open for extension but closed for modification.
"Open for Extensions"는 새로운 요구 사항이 생성될 때 기능을 추가하기 위해 코드를 개발해야 함을 의미하고 "Closed for Modifications"는 테스트 및 검증을 거친 코드를 이미 개발했음을 의미합니다. 이는 변경만 가능합니다. 버그가 발견된 경우.
public class Rectangle
{
public double Height { get; set; }
public double Width { get; set; }
}
public class AreaCalculator
{
public double TotalArea(Rectangle[] rectangles)
{
double result = 0;
foreach(Rectangle rectangle in rectangles
result += rectangle.Height * rectangle.Width;
return result;
}
}
그러나 우리 응용 프로그램은 원의 면적을 계산하기 위한 새로운 요구 사항을 받았습니다.
public class Circle
{
public double Radius { get; set; }
}
이것이 작동하려면
AreaCalculator
클래스도 변경해야 합니다.public class AreaCalculator
{
public double TotalArea(object[] shapes)
{
double result = 0;
foreach(object shape in shapes)
{
if(shape is Rectangle)
{
Rectangle rectangle = (Rectangle)obj;
result += rectangle.Height * rectangle.Width;
}
if(shape is Circle)
{
Circle circle = (Circle)obj;
result += circle.Radius * circle.Radius * Math.PI;
}
}
return result;
}
}
이러한 수정으로 애플리케이션에
Circle
를 추가했습니다.그러나
Triangle
또는 Square
를 추가해야 하는 경우에는 어떻게 합니까? if
메서드에 점점 더 TotalArea
명령문을 추가해야 합니다.이것이 바로 개방-폐쇄 원칙이 우리의 도움이 되는 곳입니다.
이 예에서
Rectangle
및 Circle
는 동일한 추상 개념인 a Shape
에서 파생될 수 있습니다.public abstract class Shape
{
public double CalculateArea();
}
이제 "Shapes"에서
Shape
클래스를 사용하겠습니다.public class Rectangle: Shape
{
public double Height { get; set; }
public double Width { get; set; }
public double CalculateArea()
{
return Height * Width;
}
}
public class Circle: Shape
{
public double Radius { get; set; }
public double CalculateArea()
{
return Radius * Radius * Math.PI;
}
}
Shapes가
CalculateArea
클래스에서 Shape
를 구현하므로 AreaCalculator
클래스를 업데이트해야 합니다.public class AreaCalculator
{
public double TotalArea(Shape[] shapes)
{
double result = 0;
foreach(Shape shape in shapes)
{
result += shape.CalculateArea();
}
return result;
}
}
이러한 변경으로 이제 우리는 개방-폐쇄 원칙을 구현하고 있습니다. 우리 응용 프로그램은 확장(예:
Triangle
클래스 생성)을 위해 열려 있지만 버그가 발견된 경우에만 수정을 위해 닫힙니다.
Reference
이 문제에 관하여(개폐 원리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eduardojuliao/open-closed-principle-1jdi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)