※ 개방/폐쇄 원칙(OCP : Open-Closed Principle)
기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야 한다.
위 클래스 다이어그램은 특정 클라이언트가 성적/출석 기록 출력 기능을 사용하는 uml이다. 여기서 만약 도서관 대여명부를 특정 클라이언트에서 출력해야할 때 SomeClient 클래스를 수정해야해 OCP를 위반한다.
위와 같이 새로운 출력 매체를 표현하는 클래스를 추가하고 출력 매체의 변경이 있더라도 SomeClient가 영향을 받지 않게 하려고 인터페이스에서 구체적인 출력 매체를 캡슐화했다. 즉, 스트래티지(Strategy/전략) 패턴을 사용했다.
OCP를 보는 또 하나의 관점은 클래스를 변경하지 않고도 대상 클래스의 환경을 변경할 수 있는 설계가 되어야 한다.
예를 들어 단위 테스트를 할 때 실제 db나 웹 서버를 사용하기 힘들다. 따라서 외부의 서비스를 흉내내는 가짜 객체를 만들어 테스트의 효율성을 높일 필요가 있다.
단위 테스트를 위해서 Db 인터페이스를 만들고 그 밑에 FakeDb를 만들어 단위 테스트를 할 때 FakeDb에 접근하게 된다.
'자바 > 기본' 카테고리의 다른 글
SOLID 원칙(3) - 리스코프 치환 원칙(LSP) (0) | 2017.06.29 |
---|---|
왜 main()메소드는 static인가? (1) | 2017.06.29 |
SOLID 원칙(1) - 단일 책임 원칙(SRP) (2) | 2017.06.29 |
이클립스 단축키, 자바 기타 (0) | 2017.06.29 |
객체지향 원리(4) - 다형성, 피터 코드의 상속 규칙 (0) | 2017.06.29 |