[본캠프] 15일차

윤영범·2026년 3월 30일

장바구니 기능 구현하면서 고민한 점 정리

장바구니 추가 로직 설계

기존 상품이 있을 때:

수량 증가

없을 때:

새로 추가

여기서 중요한 점은:

같은 상품인지 비교 후, 찾으면 바로 종료해야 한다

  • Cartlist.java
    public void setCartList(Product product) {

        for (Cart cart : cartlist) {
            if (product.getName().equals(cart.getName())) {
                cart.increaseQuantity();
                return;
            }
        }
        cartlist.add(new Cart(product, 1));
    }

해결방안
CommerSystem.java 에서 리스트를 매개변수로 전달받은후에
Cart.java에 참조변수를 이용해서 getter로 이름이 같은지 확인한후
없으면 객체생성 , 있으면 내부에 메소드를 이용해 +1 증가시키고 종료

재고 감소 로직 고민

amount 값을 계산해서 return받아서 처리받는 과정을생각했다
CommerceSystem.java쪽에 리스트가 겹치는게 많으니,
계산은 Cartlist.java.에서하고 리턴값을 받아 product에 업데이트하는과정으로 생각해봤는데
그렇게되면 책임분리가 깨지는거 같아서 방향을 그냥
CartList.java에서 전체를 순회하면서 Product의 재고를 직접 변경쪽으로 틀어버렸다

  • Cartlist.java
    public void updateAmount() {
        int updateAmount = 0;
        for (Cart cart : cartlist) {
            int amount = cart.getAmount();
            updateAmount = cart.getAmount() - cart.getCartamount();
            cart.setAmount(updateAmount);


            System.out.println(cart.getName() + " 의 수량이 " + amount + " -> " + updateAmount + " 로 변경되었습니다");
        }
        cartlist.clear();
    }

상품 추가 설계

처음시도는 Admin이 직접 Product를 생성하려고 했다.

하지만 이 방식은 입력 로직과 섞이게 됨

Product 생성은 CommerceSystem에서 수행
Admin은 전달받은 Product를 Category에 추가만 수행

입력 → Product 생성 → Admin → Category.addProduct()

Admin은 연결만 담당

CommerceSystem.java

                        Category addpro = categories.get(category - 1); // 인덱스 0부터시작 선택
                        System.out.println("상품명을 입력해주세요 : ");
                        String name = sc.nextLine();

                        System.out.println("가격을 입력해주세요 : ");
                        int price = sc.nextInt();
                        sc.nextLine();

                        System.out.println("상품 설명을 입력해주세요 : ");
                        String info = sc.nextLine();

                        System.out.println("재고수량을 입력해주세요 : ");
                        int amount = sc.nextInt();

                        Product newproduct = new Product(name, price, info, amount);
                        admin.addProduct(addpro,newproduct);

Admin.java

 public void addProduct(Category categories,Product product)
{//상품명 (name) 가격 (price) 설명 (info) 재고 (amount)
    categories.setProduct(product);
}

다음 목표
관리자 모드 설계
반복적인 코드 -> 기능으로 바꿔서 가독성좋게하기
Cart / CartList / Product 책임 더 명확히 나누기
상품 삭제 기능 설계
예외 처리

0개의 댓글