Dev/Concept
[SOLID] OCP 개방-폐쇄 원칙
마라탕천재
2024. 8. 1. 21:16
1. OCP 란?
OCP는 객체 지향 프로그래밍의 5대 원칙 중 하나인 개방-폐쇄 원칙(Open-Closed Principle)의 약자이다. 이 원칙은 "소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다"는 것이다. 즉, 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야 한다는 것이다.
2. OCP 예시
// OCP가 지켜지지 않은 사례
class Rectangle {
public double width;
public double height;
}
class AreaCalculator {
public double calculateArea(Rectangle rectangle) {
return rectangle.width * rectangle.height;
}
}
이 경우, 새로운 도형을 추가하려면 AreaCalculator 클래스를 수정해야 한다.
// OCP가 잘 지켜진 사례
interface Shape {
double calculateArea();
}
class Rectangle implements Shape {
private double width;
private double height;
public double calculateArea() {
return width * height;
}
}
class Circle implements Shape {
private double radius;
public double calculateArea() {
return Math.PI * radius * radius;
}
}
class AreaCalculator {
public double calculateArea(Shape shape) {
return shape.calculateArea();
}
}
이제 새로운 도형을 추가할 때 AreaCalculator를 수정할 필요가 없다.
3. OCP 를 구현하는 방법
- 인터페이스 활용
- 추상클래스 활용
- 상속성과 다형성 이용
- 의존성 주입
- 디자인 패턴 적용(팩토리 패턴, 전략 패턴, 컴포지트 패턴, 데코레이터 패턴)
4. OCP의 장단점
장점:
- 유연성과 확장성이 높아짐
- 코드 재사용성이 증가함.
- 유지보수가 용이해짐.
- 시스템의 결합도를 낮춤
단점:
- 초기 설계 시 더 많은 시간과 노력이 필요함.
- 코드의 복잡성이 증가
- 과도한 추상화로 인해 가독성이 떨어짐
- 모든 상황에 OCP를 적용하는 것은 비효율적일 수 있음.