[본캠프] 14일차

윤영범·2026년 3월 27일

커머스 과제

설계

Main.java - 최초 실행시 객체생성하고 데이터 삽입
CommerceSysmtem.java - 흐름제어 / UI 역활
Product - 개별상품관리 (전자제품,음식,옷)
Category - Product의 집합체 관리

인터페이스/상속으로 만들어야하는클래스
add List기능 (Category.java ,Cart.java) 등등

처음에 클래스를 구분할때 카테고리를 결국 인터페이스나 상속으로 묶어야하는건지 많은고민이있었다
결론은 X 카테고리의 역활을 생각해보면, 이름 저장 , 상품 리스트 저장 즉 행동이아닌 데이터묶음을 가지고있다

인터페이스나 추상클래스를 사용해야하는경우

  • 여러 구현이 있을 때
  • 행동이 달라질 때
  • 교체 가능성이 있을 때

문제점

  1. chapter 2 까지 진행하고 3에서 리펙토링이 이뤄지고 기존에 product리스트를 관리하던 컬렉션이
    CommerSystem.java가아닌 Category.java 가 되어버렸다 문제는 CommerSystem.java 의 생성자는 List 값을 받고있어서 그럼 CommerSystem.java 에 List를 다시 Category.java에 넘겨줘야하는건가 한참을 고민했었다

해결방안
Product 리스트를 -> category에서 관리하고
category 리스트를 -> CommerceSystem에서 생성자를 통해 받아야한다
CommerceSystem.java에서 categorylist를통해 그 하위리스트인 productlist까지 확인할수있다

  1. chapter1,2를 진행하면서 product의 정보를 얻기위해 콘솔창 index를 눌러서 들어가는걸
    switch문으로 처리하였었다 (계산기와 동일하게)
                case 1:
                    Product product = products.get(0);
                    System.out.printf("%-15s | %,10d | %s%n",
                    1 + "." +
                    product.getName(),
                    product.getPrice(),
                    product.getInfo());

                    sc.nextLine();
                    break;
                case 2:
                    product = products.get(1);
                    System.out.printf("%-15s | %,10d | %s%n",
                            2 + "." +
                                    product.getName(),
                            product.getPrice(),
                            product.getInfo());

                    sc.nextLine();
                    break;

처음에 switch문을 사용했을때는 몰랐는데 제품이 많아지고, 여러카테고리의 제품을 확인하는 과정에서 코드가 길어지면서 가독성이 떨어지고 OCP위반에 해당한다는걸 알고 수정

 if (num > 0 && num <= categories.size()) {

                Category catenum = categories.get(num - 1); // 인덱스 0부터시작 선택 
                products = catenum.getProducts();//선택된 인덱스의 product List 출력
                System.out.println("[ 실시간 커머스 플랫폼 - " + catenum.getCategory() + " ]");
                for (int i = 0; i < products.size(); i++) {
                    Product product = products.get(i);
                    System.out.printf("%-15s | %,10d | %s%n", //이름왼쪽정렬(15칸) | 숫자오른쪽정렬(10칸) | %s문자열%s줄바꿈
                            i + 1 + "." + product.getName(),
                            product.getPrice(),
                            product.getInfo());
                }
            }

스캐너로 입력된 정수에맞는 카테고리리스트에 하위인 product리스트를 출력하는 코드

느낀점
조금만 더 생각해도 수정작업없이 진행할수있는건데 코딩 작업을하면서 수정을할때마다 설계가 얼마나 중요한지 새삼스럽게 느끼게된다
이번 과제의 목표가 객체지향방식을 유지하면서 설계하는게 목적인 만큼
코드를 짜면서도 객체지향원칙에 어긋나지않나 계속한번씩 다시 생각해보고,
조금더 편하고 간편한 방식이있는지 한번씩 더 찾아보게되는거같다
지금이야 우리가 구글링이나 검색을통해 여러방식을 습득하면서 바로바로 적용할수있는데 이런 검색없이도 내가 원하는 설계를 구현할수있도록 한번 알게된 지식을 습득해서 내걸로 만드는 과정에 힘써야할꺼같다

0개의 댓글