본문
OCP(Open Closed Principle) : 개방 폐쇄 원칙
"자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다."
혹시라도 데이터베이스 프로그래밍을 경험한 적이 있다면 개방 폐쇄 원칙의 아주 좋은 예를 이미 알고 있을 것이다. 그 예란 바로 JDBC다. JDBC를 사용하는 클라이언트는 데이터베이스가 오라클에서 MySQL로 바뀌더라도 Connection을 설정하는 부분 외에는 따로 수정할 필요가 없다. Connection 설정 부분을 별도의 설정 파일로 분리해두면 클라이언트 코드는 단 한줄도 변경할 필요가 없다. JDBC뿐만 아니라 iBatis, MyBatis, 하이버네이트 등등 데이터베이스 프로그래밍을 지원하는 라이브러리와 프레임 워크에서도 개방 폐쇄 원칙의 예를 볼 수 있다.
1. 개방 폐쇄 원칙에 위배되는 경우
2. 개방 폐쇄 원칙을 적용한 경우
마지막으로 현실 세계의 개방 폐쇄 원칙의 사례를 하나 더 생각해보자. 편의점에서는 일일 삼교대로 직원이 교대한다. 주말에는 다른 아르바이트 직원이 근무하기도 한다. 하지만 직원이 바뀐다고 해서 손님이 구매라는 행위를 하는 데는 영향이 없다. 편의점 직원 중 한 명은 구매 담당자일 수도 있다. 또다른 직원은 보안 담장자일 수도 있다. 편의점 직원이 근본적으로 판매라고 하는 행위, 즉 손님과의 인터페이스가 바뀌지 않는 한 손님의 구매라는 행위는 직원이 세부적으로 구매 담당자든, 보안 담당자든 심지어 남자에서 여자로, 학생에서 노인으로 교대한다고 해도 전혀 영향을 받지 않는다. 직원 교대라고 하는 주변의 변화에 손님의 구매 행위는 영향을 받지 않는 것이고, 직원은 교대라고 하는 확장 행위에 열려 있는 것이다. 또한 교대 이외에도 구매 담당자의 행위를 추가하거나, 보안 담당자의 행위를 추가하는 확장에 대해 직원은 열려 있다.
개방 폐쇄 원칙을 따르지 않는다고 해서 객체 지향 프로그램을 구현하는 것이 불가능한 것은 아니지만 개방 폐쇄 원칙을 무시하고 프로그램을 작성하면 객체 지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성 등을 얻을 수 없다. 따라서 객체 지향 프로그래밍에서 개방 폐쇄 원칙은 반드시 지켜야 할 원칙이다.
- 참고
스프링 입문을 위한 자바객체지향의 원리와 이해(김종민 저)
댓글