Context 경계

장바구니의 단일 출처는 Provider 안에서 유지합니다

`CartProvider`는 초기 장바구니를 복원하고, reducer로 상태를 바꾸며, 변경된 결과를 다시 저장합니다. 화면 컴포넌트는 상태를 직접 고치지 않고 dispatch만 호출합니다.

복원

initCart가 저장 값을 읽습니다

localStorage의 JSON을 초기 상태로 사용합니다. 파싱 실패 시 빈 장바구니로 돌아가 앱이 멈추지 않게 합니다.

변경

dispatch가 reducer를 통과합니다

추가, 삭제, 수량 변경은 액션으로 표현됩니다. reducer는 이전 배열을 직접 수정하지 않고 새 배열을 반환합니다.

공유

Context 값이 컴포넌트로 전달됩니다

제품 목록은 dispatch를 쓰고, 장바구니 요약은 cartState를 읽습니다. props drilling 없이 같은 상태를 기준으로 렌더링합니다.

저장

useEffect가 변경 결과를 보존합니다

cartState가 바뀔 때만 저장소에 기록합니다. 새로고침 후에도 같은 장바구니로 시작하는지 확인합니다.