개방-폐쇄 원칙(Open-closed principle)
확장에 대해 열려 있어야 하고,
- 모듈의 동작을 확장할 수 있다는 것을 의미
- 요구 사항이 변경될 때, 새로운 동작을 추가해 모듈을 확장
- 즉, 모듈이 하는 일을 변경할 수 있음
수정에 대해서는 닫혀 있어야 한다.
- 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경 가능
- 모듈의 라이브러리(ex:DLL)의 수정이 필요 없음
public class Rectangle
{
public float width;
public float height;
}
public class Circle
{
public float radius;
}
public class AreaCalculator
{
public float GetRectangleArea(Rectangle rectangle)
{
return rectangle.width * rectangle.height;
}
public float GetCircleArea(Circle circle)
{
return circle.radius * circle.radius * Mathf.PI;
}
}
이제 다음으로는 개방-폐쇄 원칙을 적용해본 코드입니다.
public abstract class Shape
{
public abstract float CalculateArea();
}
public class Rectangle : Shape
{
public float width;
public float height;
public override float CalculateArea()
{
return width * height;
}
}
public class Circle : Shape
{
public float radius;
public override float CalculateArea()
{
return radius * radius * Mathf.PI;
}
}
public cloass AreaCalculator
{
public float GetArea(Shape shape)
{
return shape.CalculateArea();
}
}