WIL // SRP, Spring Boot 동작원리, 냅색 알고리즘
①객체지향 // SOLID // SRP(Single Responsibility Principle)
SOLID 원칙 중에 SRP는 한글로 번역하면 단일 책임 원칙으로 해석됩니다. 여기서 단일 책임은 Class에는 하나의 책임을 가지고 설계해야 한다는 것입니다. Class에 책임의 개수가 많아지게 되면 한 책임의 기능 변화가 다른 책임이 주는 영향에 비례해서 증가하기 때문에 전체 설계에 큰 위험이 따르게 됩니다. 또한, 단일 책임 원칙을 지키지 않게 되면 Class 재사용이 어렵게 됩니다.
② Spring Boot 동작원리
Client로부터 요청이 들어오게 되면 이를 내장 톰캣 서버(=Servlet Container)가 받게됩니다. 여기서 Bean의 관리는 Spring Container 가 수행하게 됩니다. MVC 패턴을 사용하게 되면 Dispatcher Servlet에 의해서 Controller 로 이동해 요청한 URL이 맞는지 확인합니다. 그리고 Controller에서 정의된 Bean은 Spring Container에서 불러와 사용합니다. Controller 이후 Service로 이동해 DB와 연결하고 처리된 결과를 HttpMessage Converter를 사용해 문자 혹은 객체로 바꿔서 ResponseBody에 넣어 Client로 response 하게 됩니다.
③ 냅색 알고리즘
냅색 알고리즘은 동적 계획법을 사용하는데 주어진 가방에 물건을 넣었을 때 최대 가치를 얻어내는 과정입니다.
다음 점화식을 구성해보겠습니다. DP[i][j] = 가방크기가 i일 때 j번째 물건을 담을 수 있는 최대 가치로 정의하겠습니다.
여기서 Base Value는 DP[0][i] = DP[j][0] = 0으로 명시하겠습니다.
> 크게 보면 가방의 크기 i가 weight[j] 보다 >= 경우에는 가방에 물건이 들어갈 수 있습니다. 이는 가방의 크기가 i-weight[j] 가 되게 됩니다. 그래서 가방의 크기가 i-weight[j] 크기 가방에는 이전 가방에 담겨져 있는 가방의 가치에 현재 weight[j]의 value[j]를 더하는것을 의미하게 됩니다.
> 그래서 위 내용을 점화식으로 풀어쓰면 DP[i][j] = max(DP[i][j-1], DP[i-weight[j]+value[j]) 입니다.
> 물건을 안넣거나 가방 크기 때문에 넣을 수 없다면 i번째 가방에 j-1번째 물건을 넣은 가치로 사용하게 됩니다.
> 마찬가지로 위 내용을 점화식으로 풀어쓰면 DP[i][j] = DP[i][j-1] 이 됩니다.
👍참고 블로그 // 문서
① SRP
- https://steady-coding.tistory.com/370
② 냅색 알고리즘
- https://namnamseo.tistory.com/entry/%EB%83%85%EC%83%89-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
WIL 은 Weekly I Learn 으로 매주 목, 일 작성하고 있습니다.
'WIL' 카테고리의 다른 글
WIL // RDB 확장, Dynamic Linking, 스케줄러 (0) | 2021.11.05 |
---|---|
WIL // dijksta, python 정렬, delete/truncate/drop 차이 (0) | 2021.10.17 |
댓글
이 글 공유하기
다른 글
-
WIL // RDB 확장, Dynamic Linking, 스케줄러
WIL // RDB 확장, Dynamic Linking, 스케줄러
2021.11.05 -
WIL // dijksta, python 정렬, delete/truncate/drop 차이
WIL // dijksta, python 정렬, delete/truncate/drop 차이
2021.10.17