최근 회사에서 매주 이슈 체크 및 코드 리뷰를 진행하기로 하여, 이때 전략 패턴에 대해 소개를 해주시고 공유를 받아 연습해볼 겸 한번 작성해 보았다.
취준 당시, 디자인 패턴에 대해 항상 나중에 해봐야지... 라고 생각했었는데 요즘이 적기라 생각이 들었고 추후에 도움을 많이 받을 것 같아 정리해보려고 한다.
정의부터 한번 알아보도록 하자
나는 제공해주셨던 뉴스 예제를 최근 연습하고 있는 코틀린을 적용해 한번 연습해보았다.
구현하면서 느꼈던 핵심은 각 파라미터별로 구현이 다르기에, 이후 정책이 변경되었을때 유연한 수정이 가능할것 같다는 생각이 들었다.
또한 내가 참고했던 사수님이 설명해주신 내용도 첨부하고자 한다.
예제 구현에 대해 이제 살펴보도록 해보겠다.
예제의 구성은 다음과 같다.
해당 구조를 살펴보면 다음과 같이, 전략 클래스를 캡슐화 하기위해 Sort Strategy 인터페이스를 설정함을 알 수 있다.
다음과 같이 Controller를 하나씩 이야기해보겠다.
이제 해당 부분에서 각RequestParam을 통해 받은 값을 해당 인터페이스를 거쳐 return 값을 가져와준다.
다음과 같이 각 인터페이스를 설정한 후
다음과 같이 인터페이스의 내용을 override 해줌으로써, Latest라는 Parameter 값이 들어왔을 때 "최신순으로 정렬"을 return 시켜준다.
None, Oldset 또한 위와 내용이 같기에 따로 첨부하진 않으려고 한다.
해당 파라미터에 값이 들어왔을 때, 다음과 같은 Converter class를 통해 값이 들어올 경우, 해당 request에 맞는 전략 클래스 Bean으로 연결됨을 확인할 수 있습니다.
위 설정한 Converter를 WebMvcConfigure에 Overriding을 시켜준다.
다음과 같이 제공해주신 예제의 내용을 코틀린 연습도 할 겸 겸사겸사 연습을 해보았는데 아직까지 코틀린이 아직 익숙하지 않아 더 연습을 해야 할 것 같다... ㅠㅠ
잘못된 내용이나 지적사항은 언제나 환영입니다 ! ㅎㅎ
분산락과 네임드락 그리고... 동시성 (1) | 2023.02.02 |
---|---|
Throttling과 debounce에 대해 알아보자 (0) | 2022.12.11 |
[DI,DIP] 의존성 주입에 대하여 (0) | 2022.10.12 |
[SpringBoot - 인프런] Batch Meta Data (0) | 2022.08.22 |
[SpringBoot - 인프런] EnableBatchProcessing (0) | 2022.08.20 |