Open-Closed Principle (개방-폐쇄 원칙)
개방-폐쇄 원칙(OCP)은 소프트웨어 엔티티(클래스, 모듈 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다는 원칙이다. 기존 코드를 변경하지 않고도 기능을 추가할 수 있어야 함을 뜻한다.
준수 시 이점
- 유연성: 새로운 요구사항이 생길 때 기존 코드를 건드리지 않고 새로운 클래스를 추가하는 것만으로 대응 가능하다.
- 안정성: 기존의 검증된 코드를 수정하지 않으므로, 수정으로 인해 발생할 수 있는 ‘사이드 이펙트(Side Effect)‘를 방지한다.
예시 코드
interface Shape {
double calculateArea();
}
class Rectangle implements Shape {
double width, height;
public double calculateArea() { return width * height; }
}
class Circle implements Shape {
double radius;
public double calculateArea() { return Math.PI * radius * radius; }
}
// 새로운 도형이 추가되어도 AreaCalculator의 코드는 변하지 않음
class AreaCalculator {
public double sum(Shape[] shapes) {
double total = 0;
for (Shape shape : shapes) total += shape.calculateArea();
return total;
}
}