guricode

CLI 쇼핑몰 구현 중 Cart list에 중복된 아이템 입력됨 트러블 슈팅 본문

앱/Flutter&Dart

CLI 쇼핑몰 구현 중 Cart list에 중복된 아이템 입력됨 트러블 슈팅

agentrakugaki 2025. 6. 27. 09:44

콘솔 기반의 Dart 쇼핑몰 프로그램에서, 장바구니(Cart)에 동일한 상품명을 입력하면 새로운 객체가 생성되어 리스트에 계속 중복으로 추가되는 현상이 발견되었다.

배경 :

장바구니에 상품을 추가하는 기능을 테스트하던 중,
같은 이름의 상품을 여러 번 입력하면 장바구니에 여러 개의 같은 상품 항목이 생기는 걸 확인했다.

발단 :

사용자가 "Stun Gun 1"을 두 번 입력하면, 장바구니에

Stun Gun x1

Stun Gun x1
이 두 개의 인스턴스가 생겼다.

총 가격은 제대로 계산되었지만, 사용자 입장에서 보면 중복 항목이 쌓이는 불편한 UX가 생겼다.

전개 :

처음엔 List.contains()를 통해 중복 여부를 확인하려 했지만,

Dart에서는 List.contains()가 기준으로 동작하기 때문에,
Product('Stun Gun', 2010, 1)과 같은 데이터라도 계속 다른 인스턴스로 인식했다.

 

위기 :

List.contains()나 List.where()로는 단순히 name만 비교해서 같은 상품인지 확인할 수 없었다.

결과적으로 사용자가 의도한 “하나의 상품에 수량만 증가”하는 구조를 만들 수 없었다.

 

절정 : 근본적인 해결을 위해 리스트 추가 전 수동으로 존재 여부 확인 후 갱신하는 방식을 적용하였다.

그리고 Cart 클래스를 분리하여 보수에 용이하도록 하였다.

 

결말 :

중복 상품이 입력될 경우
새로운 객체를 추가하는 것이 아니라, 기존 상품의 itemCount와 price를 갱신하도록 구현하였다.

이렇게 수정한 결과:

장바구니에서 동일한 상품은 한 줄로만 표현됨

수량과 가격만 누적되어 사용자에게 자연스러운 사용성을 제공