티스토리 뷰
- 원칙 : 객체지향 설계 원칙
- 패턴 : 객체지향 디자인 패턴
첫 원칙은 관심사 분리였다.
개방 폐쇄 원칙 (Open-Closed Principle (OCP))
- 무엇 하나가 열려있다면 무엇은 닫혀있다.
-> 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
-> 무슨 뜻이야??
-> 확장은 하는데 코드는 바뀌면 안된다.
관심자 분리 1~4까지 보았다면 이제는 PaymentService는 prepare라는 메소드를 사용할 때에 그 데이터를 Api에서 읽어오든 DB에서 읽어오든 코드 수정이 필요하지 않게 되었다.
높은 응집도와 낮은 결합도
- 응집도가 높다는 것은 하나의 모듈이 하나의 책임 또는 괌심사에 집중되어있다는 뜻.
- 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다.
- 책임과 관심사가 다른 모듈과는 낮은 결합도
- 즉 느슨하게 연결된 형태를 유지하는 것이 바람직하다.
전략 패턴
- 자신의 기능 맥락(Context)에서, 필요에 따라서 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 표현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴
List<String> scores = Arrays.asList("z","x","spring","java");
Collections.sort(scores, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
//람다
//Collections.sort(scores, (o1, o2) -> o1.length() - o2.length());
scores.forEach(System.out::println);
전형적인 전략 패턴의 예이다. 클래스를 포함시키면 sort의 기준을 바꿀 수 있다.
@SuppressWarnings({"unchecked", "rawtypes"})
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
근데 사실 봐도 모르겠다. 어떤 상황에서 사용하면 좋을지..
제어의 역전 (Inversion of Control)
- 제어권 이전을 통한 제어관계 역전, 프레임 워크의 기본 동작 원리
- 코드를 작성했을 때 제어가 어디에서 일어났는가?
- 관심사분리 1~4를 보면 exRate를 어디에서 부르게 끔 변경되기 시작했는가?
- 결국 Client가 필요했던 제어권을 경국 ObjectFactory가 가져가게 되었다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링공부
- 로그인
- JPA
- filter
- 백엔드 개발자 역량
- BindingResult
- 향해플러스
- ArgumentResolver
- 예외처리
- rejectValue
- 스프링부트
- jpa api
- 향해플러스백엔드
- thymleaf
- 항해99
- hypertexttransferprotocol
- 인터셉터
- SpringBoot
- 리터럴
- React
- 컨트
- reject
- Java
- Intercepter
- 백엔드 개발자 공부
- react실행
- 항해플러스
- HTTP
- 향해99
- exception
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함