한클래스는 하나의 책임만을 가져야한다
하나의 리턴값만을 가져야한다.
변경이 발생하였을 때 변경해야 될 부분이 적으면 단일 책임 원칙을 잘따른 것이다
클래스를 변경해야 하는 이유가 오직 하나여야한다.
결제버튼의 위치가 변경되었지만 결제기능에 대한 영향은 없다.
확장에는 열려있으나 변경에는 닫혀있어야한다.
템플릿 메소드 패턴은 "알고리즘의 뼈대"를 맞추는 것에 있습니다. 즉, 전체적인 레이아웃을 통일 시키지만 상속받은 클래스로 하여금 어느정도 유연성을 주도록하는 디자인 패턴입니다.
추상 메소드(abstrcat method)와 훅 메소드(hook method)를 적절히 사용해서 전체적인 알고리즘의 뼈대를 유지하되 유연하게 기능을 변경할 수 있도록 하고자 할 때 사용하면 유용하다
// 만약 다른 무언가를 사용하려면 true로 바꿔야 합니다.
// 이 메소드는 "후킹(Hooking)" 용도로 사용합니다.
boolean isUsingPrepareOther(){
return false;
}
// 다른 무언가가 필요하면 사용합니다.
// isUsingPrepareOther 값에 의해 오버라이드 해서 사용 합니다.
//훅 메소드 필요할 때 위쪽에 false을 true로 바꿔서 아래 메소드를 사용할수 있도록해준다.
void prepareOther(){};
@Override
boolean isUsingPrepareOther() {
return true;
}
@Override
void prepareOther() {
System.out.println("화살을 준비합니다.");
}
서브타입은 언제나 자신의 상위 타입으로 교체할 수 있어야한다.
정확성을 깨트리면 안된다.
객체(메소드)가 없다면 이렇게 안쪽에 선언해야줘한다
다른클래스들은 이클래스의 경우 무선충전이 없다 그러니 이객체는 없는객체다 라는 선언을 해준다.
public void wir(){
throw new NotSupporedException();
}
의존관계 연적원칙은 이러한 의존관계를 맺을 때 어떻게 하면 변화에 용이하게 대응할 수 있을 것인가에 대한 가이드이다
변하기 쉬운것과 어려운 것을 구분한다.
변하기 쉬운 것
-구체적인 행동
스마트폰으로 전화를건다
이메일을 발송한다.
카카오톡 메시지를 전달한다.
변하기 어려운 것
-흐름이나 개념같은 추상적인것
전화를 건다
메시지를 전달한다.
(쉬운 것 2가지를 전달한다 의 메소드 하나에 적용이된다.
이메일을 발송한다.
카카오톡 메시지를 전달한다.
이 메소드에서 보내는 내용이나 변경사항으로 인하여
이메일을 발송한다나 카카오톡 메세지를 전달 수정해야한다면둘다 수정해야 하기때이다.
)
solid 원칙이 중요한데 입에 잘 안달라 붙더라고요 ㅎㅎ 덕분에 저도 다시 읽어보고 갑니다!