개방 폐쇄 원칙
클래스와 모듈은 확장에 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
- 기능을 확장하는 것에는 열려 있어야 한다.
- ex. UserDao에서 DB 연결 방식을 확장한 것
- 자신의 핵심 기능이 구현된 코드의 변경에는 닫혀 있어야 한다.
- ex. UserDao에서 add와 get 기능에는 변화가 없음.
- ex. 인터페이스와 다형성을 활용해서 클라이언트가 UserDao를 수정하지 않도록 함.
높은 응집도와 낮은 결합도
- 높은 응집도
- 응집도가 높다 = 하나의 모듈, 클래스가 하나의 책임, 관심사에 응집됨.
- 따라서 응집도가 높으면, 변경이 일어날 때 많은 부분에서 변화가 일어남.
- 낮은 응집도 → 변화가 일어나면 문제가 발생할 수 있는 부분을 다 찾아야 함.
- 높은 응집도 → 변화가 일어나는 모듈 / 클래스만 수정해도 됨.
- 낮은 결합도
- 결합도 = 하나의 오브젝트가 변경될 때, 관계를 맺은 다른 오브젝트에서 변화가 일어나는 정도
- UserDao에서 DB 연결 부분을 분리하여 DB 연결 코드가 수정되어도 다른 부분에 적게 영향을 주도록 함.
- 인터페이스를 통해 낮은 결합도로 연결되어 있음.
전략 패턴
자신의 기능 맥락 (context)에서 필요에 따라 변하는 알고리즘을 인터페이스를 통해 외부로 분리하고 필요에 따라 사용할 수 있도록 하는 것
- ex. UserDao(context)에서 ConnectionMaker( 알고리즘 )를 분리한 것