#8PredictabilityMedium

useCart — Getters with Hidden Side Effects

useCart — 게터에 숨은 부수효과

장바구니 hook의 getItemById, calculateShipping, isEligibleForFreeShipping 같은 이름은 순수한 조회/계산을 약속합니다. 그런데 내부에는 analytics 트래킹, localStorage 저장, 이벤트 디스패치 같은 부수효과가 숨어 있어 — 호출하기만 해도 외부 상태가 바뀜.

할 일

  1. getItemById / calculateShipping순수하게 만들고, 트래킹/저장은 별도 함수로 분리
  2. 별도 함수는 동사형 이름으로 hook return 객체에 추가 export 또는 별도 export
  3. 동작은 보존 — 트래킹/저장은 명시적으로 누군가 호출하면 일어나야 함

좋은 fix

  • getItemById(id) 는 그냥 items.find(...)
  • trackItemLookup(id) 같은 함수로 트래킹 분리
  • 호출자는 "조회만" 할 때와 "조회 + 트래킹" 을 선택

안 되는 fix

  • 트래킹을 완전히 제거 (요구사항 손실)
  • JSDoc 으로 "side effect 도 함" 만 표기

학습 포인트

  • 게터/계산기는 순수 가 기본 약속
  • 부수효과는 호출자에게 명시적으로 노출되어야 함
Sandpack 로드 중…