안녕하세요 강사님, discountCache 처리 방식에 대해 질문드립니다.
108
작성한 질문수 14
@Component
class DiscountAdapter {
private val discountCache = CacheUtil<Int, Double>()
fun getDiscountRate(): (Int) -> Double = { amount ->
discountCache.getOrLoad(amount) { when (amount) {
in 100..1000 -> 0.1
in 1001..10000 -> 0.2
else -> 0.0
}}
}
}처럼 서비스는 굳이 고치지 않고 DiscountAdapter 클래스 내에서 캐시처리 하는 방법은
혹시 함수형 프로그래밍 방식에 어긋나는 부분이 있을까요?
답변 1
0
안녕하세요. KoorunG님 😀 좋은 질문 감사드립니다.
제시해주신 DiscountAdapter 클래스처럼 내부에서 캐시를 활용하는 전략도 충분히 가능합니다. 해당 방법은 함수형 프로그래밍을 일반적으로 활용하는 방법 중에 하나일 수 있습니다. (적은 코드로 기존 로직에 추가 기능을 제공)
하지만 DiscountAdapter와 같은 클래스는 Adapter라는 명확한 역할이 있기 때문에 단일책임원칙(SRP)을 지키도록 외부 시스템과의 통신을 통해 할인 정책을 가져오는 역할에만 충실하는 것이 좋습니다.
왜냐하면 PayService가 아닌 별도의 다른 서비스가 캐시 없이 할인 정책을 가져가게 되는 케이스가 생길 때 캐싱 처리 하지 않은 getDiscountRate 함수를 하나 더 만들거나 혹은 그때 저기에서 캐시를 제거한 후 캐시를 사용하는 클래스에서만 적용하는 등 큰 변화를 겪을 수 있기 때문입니다.
답변이 도움이 되었으면 좋겠습니다~! 더 궁금하신 사항이 있으면 언제든 편하게 질문 주세요 👍
진짜화면이랑달라서못해먹겟어요먹겟어요
0
13
1
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
36
1
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
28
1
혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?
0
14
1
아무도 모르게 책 내시면 모르실 줄 알고!!
1
42
2
[영한님]Spring Boot 및 프로젝트 생성
0
46
2
Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면
1
58
1
스크립트에 대해 질문 있습니다.
1
53
1
같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!
2
59
1
Shape 클래스 실습 코드 피드백 요청드립니다
0
40
2
퀴즈가 안열려요
0
71
2
예전 로드맵과 현재 강의 순서
0
41
1
run() 메서드 안에 지역변수 sum을 사용한 이유
0
79
1
강의 화면이 안나와요
0
69
1
중급 과정 학습 중 복습과 진도 진행의 우선순위에 대해 질문드립니다
0
78
1
소스 코드 좀 올려주세요.
0
49
2
개념과 격벽에 대한 이해를 팀과 공유하고 합의하는 방법
1
86
2
빠져나오기 위해서 System.in을 닫는다는게 무슨 의민가요??
0
57
1
문제2번
0
63
1
git 업로드 가능한가요?
0
78
1
API 응답 처리 커스터마이징 vs Result 클래스 활용의 차이
1
187
2
문제집 4 퀴즈 4번 질문입니다.
1
123
2
[문제집] 6_함수를 응답으로 받기 - 1번문제 오류
1
165
1
실습 자료 부분 업로드 다시 부탁드립니다!
1
143
1





