[내일배움캠프] Java 기초 문법으로 만드는 커머스 플랫폼 Step3.

김재진·2025년 12월 18일

내일배움캠프

목록 보기
21/70

1. Step3. 객체 지향 설계를 적용해 상품 카테고리와 고객 관리를 클래스 기반으로 관리하기

  • Category 클래스 생성하기
    • 설명 : Product 클래스를 관리하는 클래스입니다.
    • 전자제품, 의류, 식품 등 각 카테고리 내에 여러 Product를 만들어 줍니다.
    • List<Product>CommerceSystem 클래스가 관리하기에 적절하지 않으므로 Category 클래스가 관리하도록 변경합니다.
    • 여러 상품들을 포함하는 상위 개념 '전자제품' 같은 카테고리 이름 필드를 갖습니다.
    • 카테고리 이름을 반환하는 메서드가 구현되어야 합니다.
  • Customer 클래스 생성하기
    • 설명 : 고객 정보를 관리하는 클래스입니다.
    • 클래스는 고객명, 이메일, 등급 필드를 갖습니다.

2. Category 클래스

  • 카테고리와 카테고리 내 여러 Product들을 관리하도록 작성하였다.
import java.util.ArrayList;
import java.util.List;

public class Category {

    //  속성
    private String categoryName;
    private List<Product> products;

    // 생성자
    public Category(String categoryName) {
        this.categoryName = categoryName;
        this.products = new ArrayList<>();
    }

    // 기능
    // getter
    public String getCategoryName() {
        return categoryName;
    }

    // setter
    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    // 상품 추가
    public void addProduct(Product product) {
        products.add(product);
    }

    // 카테고리 출력
    public void displayCategory() {
        System.out.println("[ " + categoryName + " 카테고리 ]");
        int index = 1;
        for (Product product : products) {
            System.out.println(index + ". " + product.getName() + " | " + String.format("%,d", product.getPrice()) + "원" + " | " + product.getDescription());
            index++;
        }
        System.out.println("0. 뒤로가기");
    }

    // 상품 상세 정보 출력
    public void displayProductDetail(int productIndex) {
        if (productIndex >= 0) {
            Product product = products.get(productIndex);
            System.out.println("선택한 상품: " + product.getName() + " | " + String.format("%,d", product.getPrice()) + "원" + " | " + product.getDescription() + " | 재고: " + product.getQuantity() + "개");
        } else {
            System.out.println("잘못된 상품 번호입니다.");
        }
    }
}

3. CommerceSystem 클래스

  • 메서드를 사용해서 메인화면과 상품들을 보여주는 기능을 구현하였다.
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class CommerceSystem implements Runnable {
    @Override
    public void run() {
       Scanner scanner = new Scanner(System.in);
       List<Category> categories = new ArrayList<>();

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

       // 전자제품 추가
       electronics.addProduct(new Product("Galaxy S25", 1200000, "최신 안드로이드 스마트폰", 10));
       electronics.addProduct(new Product("iPhone 16", 1350000, "Apple의 최신 스마트폰", 20));
       electronics.addProduct(new Product("MacBook Pro", 2400000, "M3 칩셋이 탑재된 노트북", 5));
       electronics.addProduct(new Product("AirPods Pro", 350000, "노이즈 캔슬링 무선 이어폰", 40));

       // 의류 추가
       clothing.addProduct(new Product("청바지", 89000, "데님 청바지", 50));
       clothing.addProduct(new Product("티셔츠", 29000, "면 티셔츠", 100));
       clothing.addProduct(new Product("후드집업", 59000, "기모 후드집업", 30));

       // 식품 추가
       food.addProduct(new Product("사과", 5000, "국내산 사과", 200));
       food.addProduct(new Product("우유", 3000, "저지방 우유", 150));
       food.addProduct(new Product("바나나", 4000, "필리핀산 바나나", 100));

       // 카테고리 리스트에 추가
       categories.add(electronics);
       categories.add(clothing);
       categories.add(food);

       // 메인 메뉴 출력
       while (true) {
           System.out.println("[ 실시간 커머스 플랫폼 메인 ]");
           int index = 1;
           for (Category category : categories) {
               System.out.println(index + ". " + category.getCategoryName());
               index++;
           }
           System.out.println("0. 종료      | 프로그램 종료");

           int input = scanner.nextInt();

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

           // 카테고리 선택
           try {
               if (input >= 1) {
                   Category selectedCategory = categories.get(input - 1);
                   showCategoryMenu(selectedCategory, scanner);
               } else {
                   System.out.println("잘못된 입력입니다. 다시 선택해주세요.");
               }
           } catch (InputMismatchException e) {
               System.out.println("숫자를 입력해주세요.");
           }
       }
    }

    // 카테고리 내 상품 선택 메서드
    public void showCategoryMenu(Category category, Scanner scanner) {
        while (true) {
            category.displayCategory();

            int input = scanner.nextInt();

            if (input ==  0) {
                // 뒤로가기
                break;
            }

            // 상품 선택
            try {
                if (input >= 1 ) {
                    category.displayProductDetail(input - 1);
                } else {
                    System.out.println("잘못된 상품 번호입니다.");
                }
            } catch (InputMismatchException e) {
                System.out.println("숫자를 입력해주세요.");
            }
        }
    }
}

4. Customer 클래스

public class Customer {

    // 속성
    private String name;
    private String email;
    private String tier;

    // 생성자
    public Customer(String name, String email, String tier) {
        this.name = name;
        this.email = email;
        this.tier = tier;
    }

    // 기능
    // getter
    public String getName() {
        return name;
    }
    public String getEmail() {
        return email;
    }
    public String getTier() {
        return tier;
    }

    // setter
    public void setName(String name) {
        this.name = name;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public void setTier(String tier) {
        this.tier = tier;
    }
}

5. 마무리

  • 카테고리와 상품을 선택하는 기능을 구현하기 위해 새로운 메서드를 생성하는 과정에서 아직 java 언어에 익숙하지 않아 구현에 어려움이 많았다. 당장 어떤 내용으로 작성해야 구현이 될 지 감이 잡히지 않아서 ai의 도움을 받아 기능을 구현하는 코드를 다시 분석하는 방법으로 지금의 코드를 작성했다. 현재 예외 처리를 하지 않아서 오류가 뜨는 부분을 수정하기 위해서 찾아보고 수정하는 중이다.
profile
개발공부 처음해보는 사람

0개의 댓글