객체지향 설계 5대 원칙이라 부르는데
을 말하고 앞자를 따서 SOLID 원칙 이라고 부른다
중간 수준의 소프트웨어 구조가 아래와 같도록 만드는 데 있다.
이 원칙을 모듈 수준에서 작업할 때 적용 할 수 있다는 뜻이다.
즉, 코드 수준보다는 조금 상위에서 적용되며 모듈과 컴포넌트 내부에서 사용되는 소프트웨어 구조를 정의하는 데 도움을 준다.
변경에 유연하다.
이해하기 쉽다.
많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다.
소프트 웨어 객체는 확장에는 열려있고, 수정에는 닫혀있어야 한다는 프로그래밍 원칙이다.
처음에 이 설명을 들으면 이해가 안가는 부분이 있을 것이다.
확장을 하려면 수정을 해야하는데 수정은 못하면서 확장을 한다 ?
하지만 이 원칙을 잘 지키게 된다면 기존의 코드는 변경하지 않으면서 기능을 추가할 수 있다.
예를 한번 들어보자.

위 사진은 ocp를 지키지 않은 의존 관계이다.
배우역할은 로미오 역할에만 의존 해야하지만 로미오 역할에도 의존하고
로미오 역할에 의존하는 원빈 혹은 장동건 연예인에 의존한다. 그렇다면 연예인이 바뀐다면 배우도 같이 바뀌어야하는 상황이지만 ocp를 잘 지킨 관계라면

배우역할은 로미오라는 역할에만 의존하며 원빈이 하던 장동건이하던 어떤 연예인이 하던 배우는 신경안써도 된다.
이것이 확장에는 열려있고 수정에는 닫혀있다는 ocp 원칙이다.
다시 한번 말하지만 클라이언트 클래스(배우)는 구현체 클래스(연예인)에 직접 의존하는게 아니라
인터페이스(로미오)에만 의존해야하며 구현체 클래스(연예인)가 변경이 되더라도 <--- (확장은 열려있다)
클라이언트 클래스(배우)는 변경이 일어나서는 안된다. <--- (수정은 닫혀있다.)