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

소프트웨어 엔티티(클래스,모듈,함수 등)는 확장에 대해서는 개발되어야 하지만, 변경에 대해서는 폐쇄되어야 한다.

이 원칙은 정의는 거창하지만 의미는 간단하다.

가령, 아래와 같은 구조의 경우 EmployeeDB라는 데이터베이스 퍼사드(facade)를 통해 Employee 객체를 다루는 간단한 구조다. EmployeeDB 퍼사드는 데이터베이스 API를 직접 다루고 있다. 이것이 OCP 위반이다.

단위 테스트를 할때는 환경에 생기는 변화를 제어하고 싶을때, 실제 DB보다는 테스트용 인메모리 DB 등을 사용하고 싶은 경우가 있다.

추상화된 인터페이스는 모듈을 둘러싼 환경을 우리 마음대로 바꿀수 있게 해준다. 추상화야 말로 OCP를 지키기 위한 열쇠다.