포스트

2023-04-13-OOP-OCP

개방-폐쇄의 원칙 (OCP - Open-Closed Principle)

정의

  • 소프트웨어 요소는 확장에는 열려 있으나 수정에는 닫혀 있어야 한다.

확장에 대해 열려 있다

  • 이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다.
  • 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다.
    • 즉, 모듈이 하는 일을 변경할 수 있다.
  • 새로운 타입을 추가하여 extends 하는 것을 확장이라고 하며, 단순히 메소드의 기능이 늘어나는 것을 확장이라고 하지 않는다. 확장을 위해 소스코드를 수정해야 한다면 Fragility가 발생하기 때문에 코드에 악취가 발생하게 된다.

수정에 대해 닫혀 있다

  • 모듈의 소스 코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다.
    • 그 모듈의 실행 가능한 바이너리 형태나 링크 가능한 라이브러리
      • 예를 들어 윈도의 DLL이나 자바의 .jar 를 건드릴 필요가 없다.
  • 확장된 타입에 대한 코드 수정을 변경이라고 하는 것이 아닌, 새로운 타입을 확장할 시 상위 타입의 변경이 없는 것을 의미한다.

OCP를 따를 때의 이점

  • 수정에 취약하지 않는 코드가 된다.
  • 메소드를 추가하더라도 클라이언트의 코드는 수정이 필요 없다
  • 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있다

주의점

  • 변하는 부분과 변하지 않는 부분을 분리하고, 변하는 부분을 추상화 해야한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.