객체 지향 설계 5원칙 (SOLID)
응집도를 높이고, 결합도를 낮춰라 (High Cohesion, Loose Coupling)
SRP (단일 책임 원칙)
어떤 클래스를 변경해야 하는 이유는 하나 뿐이다.
- 클래스/속성/메서드/패키지/모듈/프레임워크 등에도 적용된다
- 장점 : 재사용성이 좋아진다
- A 기능과 B 기능으로 나누어져있으면, 다른 클래스에서 A 기능만 필요한 경우에는 A 만 가져다 쓸 수 있는 모듈이 된다.
OCP
확장은 열려있고, 변경은 닫혀있다.
- 장점 : 유지보수성이 좋아진다
- JDBC에서 DB를 mysql 에서 oracle 로 바꾸어도 Connection 설정 부분만 바꾸면 된다.
- 자바 애플리케이션은 JDBC 인터페이스로 인해 변화에 영향을 받지 않는다.
- 변하는 것과 변하지 않는 것을 구분해야 한다!
LSP (리스코프 치환 원칙)
서브 타입은 기반 타입으로 변경할 수 있어야 한다. (상속)
ISP (인터페이스 분리 원칙)
자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
DIP (의존 역전 원칙)
자신보다 변경되기 쉬운 것들에 의존하지 않는다.
- 변하기 어려운 상위 클래스/ 인터페이스/ 추상 클래스에 의존하라.
- 자신보다 변하기 쉬운 것에 의존하던 관계 -> 인터페이스를 추가하여 의존성을 역전