Main.java - 최초 실행시 객체생성하고 데이터 삽입
CommerceSysmtem.java - 흐름제어 / UI 역활
Product - 개별상품관리 (전자제품,음식,옷)
Category - Product의 집합체 관리
인터페이스/상속으로 만들어야하는클래스
add List기능 (Category.java ,Cart.java) 등등
처음에 클래스를 구분할때 카테고리를 결국 인터페이스나 상속으로 묶어야하는건지 많은고민이있었다
결론은 X 카테고리의 역활을 생각해보면, 이름 저장 , 상품 리스트 저장 즉 행동이아닌 데이터묶음을 가지고있다
인터페이스나 추상클래스를 사용해야하는경우
- 여러 구현이 있을 때
- 행동이 달라질 때
- 교체 가능성이 있을 때

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

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