🔌 SPARTA/Assignments

[Java 문법] 커머스 과제

eunjiom 2026. 1. 23. 14:44

🗒️ 플로우차트

1단계: if문 기초

  • BMI 계산 후 체중 판별

 

2단계: if문 응용 + 중첩

  •  윤년판별기


1️⃣ Step1 : 객체 지향 설계를 적용해 상품 관리 시스템을 프로그래밍

 

1. Product 클래스

  • 개별 상품을 관리하는 클래스
  • 상품명, 가격, 설명, 재고수량 필드 생성
    // 상품명, 가격, 설명, 재고수량 필드 만들기
    private String name;
    private int price;
    private String description;
    private int stock;
  • prive로 직접 접근을 막음 (캡슐화)
    public Product(String name, int price, String description, int stock){
        this.name = name;
        this.price = price;
        this.description = description;
        this.stock = stock;
    }
  • 생성자를 생성해 밖에서 준 값을 저장
    // getter로 정보 출력
    public String getName(){
        return name;
    }

    public int getPrice(){
        return price;
    }

    public String getDescription(){
        return description;
    }

    public int getStock(){
        return stock;
    }
  • getter을 이용하여 Main 클래스에 정보 출력

2. Main 클래스

  • 프로그램 시작 전에 필요한 것들 준비하는 곳 / 셋팅 담당
  • List를 선언하고 Product 제품 세팅, 리스트에 추가
// 리스트 선언, product 추가
        List<Product> products = new ArrayList<>();

        // 제품 세팅
        products.add(new Product(
                "Galaxy S25",
                1200000,
                "최신 안드로이드 스마트폰",
                10
        ));

        products.add(new Product(
                "iPhone 16",
                1350000,
                "Apple의 최신 스마트폰",
                5
        ));

        products.add(new Product(
                "MacBook Pro",
                2400000,
                "M3 칩셋이 탑재된 노트북",
                7
        ));

        products.add(new Product(
                "AirPods Pro",
                350000,
                "노이즈 캔슬링 무선 이어폰",
                13
        ));
  • 반복문(for)을 통해 products 탐색 / 0 입력 시 종료
 	Scanner sc = new Scanner(System.in);

        //제목
        System.out.println("[ 실시간 커머스 플랫폼 - 전자제품 ]");

        // 상품 목록 출력(List > size 이용)
        for (int i = 0; i < products.size(); i++){
            Product a = products.get(i);
            System.out.println(
                    (i+1) + ". " + a.getName() + " | " + a.getPrice() + "원" + " | " +a.getDescription()
            );
        }

        // 종료
        System.out.println("0. 종료       | 프로그램 종료");
        String exit = sc.nextLine();

        if(exit.equals("0")){
            System.out.println("커머스 플랫폼을 종료합니다.");
        }
    }
  • 실행(run)
[ 실시간 커머스 플랫폼 - 전자제품 ]
1. Galaxy S25 | 1200000원 | 최신 안드로이드 스마트폰
2. iPhone 16 | 1350000원 | Apple의 최신 스마트폰
3. MacBook Pro | 2400000원 | M3 칩셋이 탑재된 노트북
4. AirPods Pro | 350000원 | 노이즈 캔슬링 무선 이어폰
0. 종료       | 프로그램 종료
0
커머스 플랫폼을 종료합니다.
  • 트러블 슈팅

: 0을 입력받고 종료하기 위해

int exit = Integer.parseInt(sc.nextLine());

 

로 이용하려 했으나 오류가 발생하여 String 이용 ( "0" 또한 문자열이기 때문)

 

2️⃣ Step2 : 객체 지향 설계를 적용해 순서 제어를 클래스로 관리

1. CommerceSystem 클래스

  • 커머스 플랫폼의 상품을 관리하고 사용자 입력을 처리하는 클래스
  • Product를 관리하는 리스트 필드 생성
    private List<Product> products;
  • products 상품목록 입력받기
    // Main = 상품 준비, CommerceSystem = 상품 사용
    public CommerceSystem(List<Product> products){
        this.products = products;
    }
  • start() 함수로 입력, 반복문 관리
public class CommerceSystem {
 	public void start() {
        Scanner sc = new Scanner(System.in);

        //제목
        System.out.println("[ 실시간 커머스 플랫폼 - 전자제품 ]");

        // 상품 목록 출력(List > size 이용)
        for (int i = 0; i < products.size(); i++){
            Product a = products.get(i);
            System.out.println(
                    (i+1) + ". " + a.getName() + " | " + a.getPrice() + "원" + " | " +a.getDescription()
            );
        }

        // 종료
        System.out.println("0. 종료       | 프로그램 종료");
        String exit = sc.nextLine();

        if(exit.equals("0")){
            System.out.println("커머스 플랫폼을 종료합니다.");
        }
    }
public class Main {
    public static void main(String[] args) {
    
        CommerceSystem system = new CommerceSystem(products);
        system.start();

 

3️⃣ Step3 : 객체 지향 설계를 적용해 상품 카테고리와 고객 관리를 클래스 기반으로 관리

1. Category 클래스

  • Product 클래스를 관리하는 클래스
  • 카테고리 필드 생성 > 반환
public class Category {

    // 카테고리 이름 필드(전자제품 등)
    private String name;

    // 카테고리에 속한 상품들
    private List<Product> products = new ArrayList<>();

    // 카테고리 이름 필드
    public Category(String name){
        this.name = name;
        this.products = new ArrayList<>();
    }

    // 카테고리 이름 반환
    public String getName(){
        return name;
    }

    // 카테고리 상품들 반환
    public List<Product> getProducts(){
        return products;
    }


}

 

2. Main 클래스

  • 셋팅 담당 / 매장 준비
  • 카테고리 생성 > 상품 담기 > 리스트로 묶고 CommerceSystem 으로 넘기기
public class Main {
    public static void main(String[] args) {

        // 리스트 선언, product 추가
        List<Product> products = new ArrayList<>();

        // 카테고리 생성
        Category electronics = new Category("전자제품");
        Category cloth = new Category("의류");
        Category food = new Category("식품");

        // 카테고리에 상품 담기
        electronics.getProducts().add(new Product(
                "Galaxy S25",
                1200000,
                "최신 안드로이드 스마트폰",
                10
        ));

        electronics.getProducts().add(new Product(
                "iPhone 16",
                1350000,
                "Apple의 최신 스마트폰",
                5
        ));

        electronics.getProducts().add(new Product(
                "MacBook Pro",
                2400000,
                "M3 칩셋이 탑재된 노트북",
                7
        ));

        electronics.getProducts().add(new Product(
                "AirPods Pro",
                350000,
                "노이즈 캔슬링 무선 이어폰",
                13
        ));

        // 카테고리 리스트로 묶기
        List<Category> categories = new ArrayList<>();
        categories.add(electronics);
        categories.add(cloth);
        categories.add(food);

        // start() 함수 / 커머스 시스템으로 넘기기
        CommerceSystem system = new CommerceSystem(categories);
        system.start();

    }
}

 

3. CommerceSystem 클래스

  • 반복문을 이용하여 카테고리, 카테고리 내 제품 출력
public class CommerceSystem {

    // 카테고리 목록 관리
    private List<Category> categories;

    public CommerceSystem(List<Category> categories) {
        this.categories = categories;
    }

    // start() 메서드로 관리
    public void start() {
        Scanner sc = new Scanner(System.in);

        while (true) {

            // 카테고리 출력
            System.out.println("[ 실시간 커머스 플랫폼 메인 ]");

            for (int i = 0; i < categories.size(); i++) {
                System.out.println((i + 1) + ". " + categories.get(i).getName());
            }
            // 종료
            System.out.println("0. 종료       | 프로그램 종료");

            // 카테고리 숫자 입력받기
            int categoryChoice = Integer.parseInt(sc.nextLine());

            if (categoryChoice == 0) {
                System.out.println("커머스 플랫폼을 종료합니다.");
                break;
            }

            // 선택한 카테고리
            Category selecCategory = categories.get(categoryChoice - 1);

            // 카테고리 내 제품 보여주기
            List<Product> products = selecCategory.getProducts();
            for (int i = 0; i < products.size(); i++) {
                Product p = products.get(i);
                System.out.println((i + 1) + ". " + p.getName() + " | " + p.getPrice() + "원" + " | " + p.getDescription());
            }
            System.out.println("0. 뒤로가기");

            // 제품 숫자 입력받기
            int productChoice = Integer.parseInt(sc.nextLine());

            if (productChoice == 0) {
                continue;
            }

            Product selecProduct = products.get(productChoice -1);
            System.out.println("선택한 상품: "+ selecProduct.getName()+" | "+selecProduct.getPrice()+"원"+" | "
                    +selecProduct.getDescription()+" | "+selecProduct.getStock()+"개");

        }

    }

}
  • 트러블 슈팅: 전자제품 카테고리 내에 0(뒤로가기) 입력 시 continue; 가 없을 때 오류 발생