결합도는 낮추고 응집도는 높이는게 좋다.
before
public void move(){
if(name.equals("저글링")) {
speed += 3
}else if(name.equals("탱크")) {
if("시즈모드") {
speed = 0
} else {
speed = 10
}
}else if(name.equals("정찰기")) {
speed = 15
충돌 = false
}
}
after
class 저글링 extends Unit{
public void move() {
this.speed += 3
}
}
class 탱크 extends Unit{
public void move() {
if("시즈모드"){
speed = 0
} else {
speed = 10
}
}
}
class 정찰기 extends Unit{
public void 정찰기() {
this.충돌 = false
}
public void move() {
speed = 15
}
}
상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해 줄 수 있다.
서브 타입은 언제나 자신의 기반(상위) 타입으로 교체 할 수 있어야 한다.
클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
프로젝트 요구 사항과 설계에 따라서 SRP/ISP를 선택한다.
자신보다 변하기 쉬운 것에 의존하지 말아야 한다.
POJO JAVA
1. 특정 규약에 종속되지 않는다.
2. 특정 환경에 종속되지 않는다.
POJO Framework
Spring, Hibernate