※ 개방/폐쇄 원칙(OCP : Open-Closed Principle)


기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야 한다.


위 클래스 다이어그램은 특정 클라이언트가 성적/출석 기록 출력 기능을 사용하는 uml이다. 여기서 만약 도서관 대여명부를 특정 클라이언트에서 출력해야할 때 SomeClient 클래스를 수정해야해 OCP를 위반한다.


위와 같이 새로운 출력 매체를 표현하는 클래스를 추가하고 출력 매체의 변경이 있더라도 SomeClient가 영향을 받지 않게 하려고 인터페이스에서 구체적인 출력 매체를 캡슐화했다. 즉, 스트래티지(Strategy/전략) 패턴을 사용했다.


OCP를 보는 또 하나의 관점은 클래스를 변경하지 않고도 대상 클래스의 환경을 변경할 수 있는 설계가 되어야 한다.

예를 들어 단위 테스트를 할 때 실제 db나 웹 서버를 사용하기 힘들다. 따라서 외부의 서비스를 흉내내는 가짜 객체를 만들어 테스트의 효율성을 높일 필요가 있다.

단위 테스트를 위해서 Db 인터페이스를 만들고 그 밑에 FakeDb를 만들어 단위 테스트를 할 때 FakeDb에 접근하게 된다.

+ Recent posts