작성
·
24
1
@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
함수를 하나 더 만들거나 혹은 그때 저기에서 캐시를 제거한 후 캐시를 사용하는 클래스에서만 적용하는 등 큰 변화를 겪을 수 있기 때문입니다.
답변이 도움이 되었으면 좋겠습니다~! 더 궁금하신 사항이 있으면 언제든 편하게 질문 주세요 👍