더북(TheBook)

장바구니는 일반적인 배열이며, 사은품은 단순히 배열에 추가하는 항목입니다. 문제는 이 코드가 오류를 일으키기 일보 직전이라는 점입니다. 코드를 살펴보면서 문제점을 찾아봅시다.

이 코드는 조작이 위험해 보이지 않는 경우를 보여주는 훌륭한 예시입니다. 만약 6개월이 지난 뒤 선량한 개발자가 코드를 정리하기 위해 모든 변수를 함수의 상단으로 옮기려고 한다면 어떻게 될까요?

arrays/push/push.js

function summarizeCartUpdated(cart) {
  const cartWithReward = addFreeGift(cart);
  const discountable = cart.filter(item => item.discount);
  if (discountable.length > 1) {
    return {
      error: '할인 상품은 하나만 주문할 수 있습니다.',
    };
  }
  return {
    discounts: discountable.length,
    items: cartWithReward.length,
    cart: cartWithReward,
  };
}

 

이제 버그가 눈에 보입니다. 함수 addFreeGift()를 사용하면 배열 cart를 조작합니다. 상품이 세 개 이상이면, 할인이 적용된 아이템(free gift)이 추가됩니다. 반환값, 즉 장바구니(cart)에 사은품을 추가해 새로운 변수에 할당하더라도, 원본 배열인 cart가 이미 조작된 후입니다.결국 상품을 세 가지 이상 선택하고 그중 하나가 할인 상품인 모든 고객에게 오류가 발생합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.