์๊ฐํด๋ณด๊ธฐ
Step3 ์๊ตฌ์ฌํญ์ ์ฝ์ผ๋ฉฐ ๋๋ ์ ์ ์ด์ ๋จ์ํ ์ํ ์ถ๋ ฅ์ด ์๋๋ผ, ์ํ์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ฌถ๊ณ ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ์ ๋ํ ์ค๊ณ๊ฐ ์ค์ํด์ก๋ค๋ ๊ฒ์ด๋ค.
Step2๊น์ง๋ CommerceSystem์ด ์ง์ Product ๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ์ง๋ง, ์นดํ ๊ณ ๋ฆฌ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ฉด์ ์ด ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ ๊ฒ์ ์ ์ ํ์ง ์๋ค๊ณ ํ๋จํ๋ค.
์ค๊ณ
Step3์์๋
Category ํด๋์ค
- ํ๋์ ์นดํ ๊ณ ๋ฆฌ(์ ์์ ํ, ์๋ฅ, ์ํ)๋ฅผ ํํ
- ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ์ํ Product ๋ฆฌ์คํธ ๊ด๋ฆฌ
CommerceSystem ํด๋์ค
- ์ฌ๋ฌ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ด๋ฆฌ
- ์นดํ ๊ณ ๋ฆฌ ์ ํ๊ณผ ์ํ ์ ํ ํ๋ฆ ์ ์ด
Product ํด๋์ค
- Step1๋ถํฐ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๋๋ฉ์ธ ๊ฐ์ฒด
Customer ํด๋์ค
- ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ํํํ๋ ๊ฐ์ฒด
Category ํด๋์ค
category๋ ์นดํ
๊ณ ๋ฆฌ ์ด๋ฆ๊ณผ ํด๋น ์นดํ
๊ณ ๋ฆฌ์ ์ํ ์ํ ๋ชฉ๋ก์ ํจ๊ป ๊ด๋ฆฌํ๋ ํด๋์ค์ด๋ค.
CommerceSystem์ ๋ ์ด์ Product๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง ์๊ณ , Category๋ฅผ ํตํด์๋ง ์ํ์ ์ ๊ทผํ๋๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ค.
Category.java ์ ์ฒด ์ฝ๋
public class Category {
private final String name;
private final List<Product> products;
public Category(String name, List<Product> products) {
this.name = name;
this.products = products;
}
public String getName() {
return name;
}
public List<Product> getProducts() {
return products;
}
}
CommerceSystem ํด๋์ค
CommerceSystem์ ์ด์ List<product> ๋์ List<Category>๋ฅผ ๊ด๋ฆฌํ๋ค.
ํ๋ก๊ทธ๋จ ์คํ ์
- ๋ฉ์ธ ๋ฉ๋ด์์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ํํ๊ณ
- ์ ํํ ์นดํ
๊ณ ๋ฆฌ์์ ์ํ์ ์ ํํ๋
๊ตฌ์กฐ๋ก ๊ตฌํํ๋ค.
private final List<Category> categories;
CommerceSystem.java ์ ์ฒด ์ฝ๋
package kr.spartaclub.com.example.commerce.step3;
import kr.spartaclub.com.example.commerce.Product;
import java.util.List;
import java.util.Scanner;
public class CommerceSystem {
private final List<Category> categories;
private final Scanner sc = new Scanner(System.in);
public CommerceSystem(List<Category> categories) {
this.categories = categories;
}
public void start() {
while (true) {
printMainMenu();
int input = sc.nextInt();
if (input == 0) {
System.out.println("์ปค๋จธ์ค ํ๋ซํผ์ ์ข
๋ฃํฉ๋๋ค.");
break;
}
if (input >= 1 && input <= categories.size()) {
Category selectedCategory = categories.get(input - 1);
showCategoryMenu(selectedCategory);
} else {
System.out.println("์๋ชป๋ ์
๋ ฅ์
๋๋ค. ๋ค์ ์ ํํด์ฃผ์ธ์.\n");
}
}
}
private void printMainMenu() {
System.out.println("[ ์ค์๊ฐ ์ปค๋จธ์ค ํ๋ซํผ ๋ฉ์ธ ]");
for (int i = 0; i < categories.size(); i++) {
System.out.printf("%d. %s%n", i + 1, categories.get(i).getName());
}
System.out.println("0. ์ข
๋ฃ | ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
System.out.print("> ");
}
private void showCategoryMenu(Category category) {
while (true) {
System.out.println();
System.out.printf("[ %s ์นดํ
๊ณ ๋ฆฌ ]%n", category.getName());
List<Product> products = category.getProducts();
for (int i = 0; i < products.size(); i++) {
Product p = products.get(i);
System.out.printf("%d. %-12s | %,d์ | %s%n",
i + 1, p.getName(), p.getPrice(), p.getDescription());
}
System.out.println("0. ๋ค๋ก๊ฐ๊ธฐ");
System.out.print("> ");
int input = sc.nextInt();
if (input == 0) {
System.out.println();
return; // ๋ฉ์ธ์ผ๋ก ๋ณต๊ท
}
if (input >= 1 && input <= products.size()) {
Product selected = products.get(input - 1);
System.out.printf("์ ํํ ์ํ: %s | %,d์ | %s | ์ฌ๊ณ : %d๊ฐ%n%n",
selected.getName(),
selected.getPrice(),
selected.getDescription(),
selected.getStock());
} else {
System.out.println("์๋ชป๋ ์
๋ ฅ์
๋๋ค. ๋ค์ ์ ํํด์ฃผ์ธ์.\n");
}
}
}
}
Customer ํด๋์ค
Customer ํด๋์ค๋ ๊ณ ๊ฐ๋ช , ์ด๋ฉ์ผ, ๋ฑ๊ธ, ๋์ ์ฃผ๋ฌธ ๊ธ์ก ํ๋๋ฅผ ๊ฐ์ง๋๋ก ๊ตฌํํ๋ค.
Customer.java ์ ์ฒด ์ฝ๋
package kr.spartaclub.com.example.commerce.step3;
public class Customer {
private final String name;
private final String email;
private String grade; // Step3์์๋ ์ผ๋จ String์ผ๋ก, ์ถํ์ Enum์ผ๋ก ํ์ฅ ๊ฐ๋ฅ
private int totalOrderAmount; // ๋์ ์ฃผ๋ฌธ ๊ธ์ก
public Customer(String name, String email) {
this.name = name;
this.email = email;
this.grade = "BRONZE";
this.totalOrderAmount = 0;
}
public String getName() { return name; }
public String getEmail() { return email; }
public String getGrade() { return grade; }
public int getTotalOrderAmount() { return totalOrderAmount; }
}
Main ํด๋์ค
Step3 Main ํด๋์ค๋ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์นดํ ๊ณ ๋ฆฌ ๊ฐ์ฒด๋ก ๋ฌถ์ด CommerceSystem์ ์ ๋ฌํ๋ ์ญํ ๋ง ๋ด๋นํ๋ค.
Main.java ์ ์ฒด ์ฝ๋
package kr.spartaclub.com.example.commerce.step3;
import kr.spartaclub.com.example.commerce.Product;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// ์ ์์ ํ
List<Product> electronics = new ArrayList<>();
electronics.add(new Product("Galaxy S24", 1200000, "์ต์ ์๋๋ก์ด๋ ์ค๋งํธํฐ", 50));
electronics.add(new Product("iPhone 15", 1350000, "Apple์ ์ต์ ์ค๋งํธํฐ", 30));
electronics.add(new Product("MacBook Pro", 2400000, "M3 ์นฉ์
์ด ํ์ฌ๋ ๋
ธํธ๋ถ", 15));
electronics.add(new Product("AirPods Pro", 350000, "๋
ธ์ด์ฆ ์บ์ฌ๋ง ๋ฌด์ ์ด์ดํฐ", 50));
// ์๋ฅ
List<Product> clothes = new ArrayList<>();
clothes.add(new Product("ํ๋ํฐ", 59000, "๊ธฐ๋ณธ ํ๋ํฐ", 100));
clothes.add(new Product("์ฒญ๋ฐ์ง", 79000, "์ฌ๋ฆผํ ์ฒญ๋ฐ์ง", 80));
// ์ํ
List<Product> foods = new ArrayList<>();
foods.add(new Product("์ฌ๊ณผ", 12000, "๋น๋ ๋์ ์ฌ๊ณผ 1kg", 40));
foods.add(new Product("๋ผ๋ฉด", 4500, "๋งค์ด๋ง ๋ผ๋ฉด 5๊ฐ์
", 60));
List<Category> categories = new ArrayList<>();
categories.add(new Category("์ ์์ ํ", electronics));
categories.add(new Category("์๋ฅ", clothes));
categories.add(new Category("์ํ", foods));
CommerceSystem system = new CommerceSystem(categories);
system.start();
}
}
๊ฒฐ๊ณผ


๋ฉ์ธ ํ๋ฉด์์ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์ ํํ๊ณ , ์ ํํ ์นดํ
๊ณ ๋ฆฌ ๋ด์์ ์ํ์ ์กฐํํ ์ ์์์ ํ์ธํ๋ค.
์นดํ
๊ณ ๋ฆฌ ๊ฐ๋
์ด ๋์
๋๋ฉด์ ์ปค๋จธ์ค ํ๋ซํผ ๊ตฌ์กฐ๊ฐ ์ค์ ์๋น์ค์ ๋ ์ ์ฌํด์ก๋ค๊ณ ๋๊ผ๋ค.
'๐ฅ ๋ด์ผ๋ฐฐ์์บ ํ > ๐ ๊ณผ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ด์ผ๋ฐฐ์์บ ํ Spring_3๊ธฐ] CH2 ์ปค๋จธ์ค ๊ณผ์ - ๋์ ๊ธฐ๋ฅ (0) | 2026.01.28 |
|---|---|
| [๋ด์ผ๋ฐฐ์์บ ํ Spring_3๊ธฐ] CH2 ์ปค๋จธ์ค ๊ณผ์ Step4 (0) | 2026.01.28 |
| [๋ด์ผ๋ฐฐ์์บ ํ Spring_3๊ธฐ] CH2 ์ปค๋จธ์ค ๊ณผ์ Step2 (0) | 2026.01.28 |
| [๋ด์ผ๋ฐฐ์์บ ํ Spring_3๊ธฐ] CH2 ์ปค๋จธ์ค ๊ณผ์ Step1 (0) | 2026.01.28 |
| [๋ด์ผ๋ฐฐ์์บ ํ Spring_3๊ธฐ] CH2 ๊ณ์ฐ๊ธฐ๊ณผ์ Step3 (0) | 2026.01.27 |