[SOLID] 개방-폐쇄 원칙 (Open/Closed Principle, OCP)

엔스마트·2024년 6월 5일

개방-폐쇄 원칙(Open/Closed Principle, OCP)은 소프트웨어 설계의 핵심 원칙 중 하나로, 로버트 C. 마틴과 버트란드 마이어가 제안한 원칙입니다. 이 원칙은 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 변경에는 폐쇄적이어야 한다는 것을 강조합니다. 즉, 기존의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있도록 설계해야 한다는 것입니다.

OCP의 중요성

  • 유연성을 확보합니다:
    OCP를 준수하는 코드는 새로운 요구사항이나 기능 추가에 유연하게 대응할 수 있습니다. 기존 코드를 변경하지 않고도 새로운 기능을 확장할 수 있기 때문에 시스템의 유연성이 향상됩니다.

  • 코드의 안정성을 보장합니다:
    기존의 코드를 수정하지 않고 새로운 기능을 추가하기 때문에, 기존의 기능에 문제가 발생하지 않도록 안정성을 보장할 수 있습니다.

  • 재사용성을 증가시킵니다:
    OCP를 준수하는 코드는 모듈화되어 있어서 새로운 기능을 추가할 때 쉽게 재사용할 수 있습니다.

OCP를 준수하는 방법

  • 추상화를 활용합니다:
    추상화를 통해 변경될 수 있는 부분을 추상화하여 독립적으로 관리할 수 있도록 합니다.

  • 상속이나 인터페이스를 활용합니다:
    상속이나 인터페이스를 사용하여 기존 코드의 수정 없이 새로운 기능을 추가할 수 있도록 합니다.

  • 의존성 주입(Dependency Injection)을 사용합니다:
    의존성 주입을 통해 객체 간의 의존성을 낮추고, 기존 객체의 변경 없이 새로운 구현체를 주입하여 기능을 확장할 수 있습니다.

예시

예를 들어, 여러 종류의 도형을 그리는 프로그램이 있다고 가정해봅시다. 이 프로그램은 처음에는 원과 사각형만 지원했지만, 이후 삼각형을 추가로 지원해야 할 필요가 생겼습니다. OCP를 준수하여 이 기능을 확장하는 방법은 다음과 같습니다:

// 도형을 나타내는 인터페이스
interface Shape {
    void draw();
}

// 원 클래스
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("원을 그립니다.");
    }
}

// 사각형 클래스
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("사각형을 그립니다.");
    }
}

// 삼각형 클래스 (추가로 확장되는 클래스)
class Triangle implements Shape {
    @Override
    public void draw() {
        System.out.println("삼각형을 그립니다.");
    }
}

이와 같이 인터페이스를 통해 다양한 도형을 그리는 클래스를 추상화하여 확장에 열려 있게끔 설계합니다. 새로운 도형이 추가되어도 기존의 코드를 수정할 필요 없이 새로운 도형 클래스를 추가하면 됩니다. 이는 개방-폐쇄 원칙을 준수한 예시입니다.

profile
클라우드 전환, MSA 서비스, DevOps 환경 구축과 기술지원 그리고 엔터프라이즈 시스템을 구축하는 최고 실력과 경험을 가진 Architect Group 입니다.

0개의 댓글