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<>();
}
public String getCategoryName() {
return categoryName;
}
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;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getTier() {
return tier;
}
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의 도움을 받아 기능을 구현하는 코드를 다시 분석하는 방법으로 지금의 코드를 작성했다. 현재 예외 처리를 하지 않아서 오류가 뜨는 부분을 수정하기 위해서 찾아보고 수정하는 중이다.