https://github.com/knu-k/java-convenience-store-7-knu-k
https://github.com/knu-k/java-convenience-store-7-knu-k
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/knu-k/java-convenience-store-7-knu-k
- Owner: knu-k
- Created: 2024-11-05T06:22:02.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-11-11T14:29:07.000Z (7 months ago)
- Last Synced: 2025-04-01T19:48:12.588Z (3 months ago)
- Language: Java
- Size: 217 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
## ๐ช ํธ์์ ๊ด๋ฆฌ ์์คํ - ์ฐ์ํ ํ ํฌ ํ๋ฆฌ์ฝ์ค 4์ฃผ์ฐจ ํ๋ก์ ํธ
> **ํธ์์ ์์คํ ํ๋ก์ ํธ**๋ ํธ์์ ์ํ ๊ด๋ฆฌ, ํ๋ก๋ชจ์ ์ ์ฉ, ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ, ๊ฒฐ์ ๋ฐ ์์์ฆ ๋ฐํ๊น์ง ํธ์์ ์ด์์ ํ๋ฆ์ ๊ตฌํํ ํ๋ก๊ทธ๋จ์ ๋๋ค. ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ค์ํ ๋์์ธ ํจํด์ผ๋ก ๊ตฌ์ฑํ์ฌ ๋ ๋ฆฝ์ ์ด๊ณ ์ ์ง ๋ณด์์ฑ์ด ๋์ ํ๋ก๊ทธ๋จ์ ๋ชฉํ๋ก ๊ฐ๋ฐํ์ต๋๋ค.
---
## ๐ ๋ชฉ์ฐจ
1. [๋๋ฉ์ธ ์ค๊ณ](#-๋๋ฉ์ธ-์ค๊ณ)
2. [์ ์ฒด ๊ธฐ๋ฅ ๋ช ์ธ](#-์ ์ฒด-๊ธฐ๋ฅ-๋ช ์ธ)
2. [์์คํ ํ๋ฆ](#-์์คํ -ํ๋ฆ)
3. [์ฃผ์ ๋ก์ง ๋ฐ ๋์์ธ ํจํด](#-์ฃผ์-๋ก์ง-๋ฐ-๋์์ธ-ํจํด)
4. [๋จ๊ณ๋ณ ์ฑ ์ ๋ถ๋ฆฌ](#-๋จ๊ณ๋ณ-์ฑ ์-๋ถ๋ฆฌ)
5. [์๊ฐ ๊ณ ์ ํ ์คํธ](#-์๊ฐ-๊ณ ์ -ํ ์คํธ)
6. [์ค์น ๋ฐ ์คํ ๋ฐฉ๋ฒ](#-์ค์น-๋ฐ-์คํ-๋ฐฉ๋ฒ)---
## ๐ ๋๋ฉ์ธ ์ค๊ณ
ํธ์์ ์ด์์ ํ์ํ ์์๋ค์ ๊ฐ์ฒด๋ก ํํํ์์ผ๋ฉฐ, ํ์ํ ๋ก์ง์ ์บก์ํํ์ฌ ์ ์ง ๋ณด์์ฑ์ ๋์์ต๋๋ค.
| ๋๋ฉ์ธ | ํด๋์ค ๋ช | ์ค๋ช |
|--------|-----------|------|
| **์ํ** | `Product` | ์ํ์ ๊ธฐ๋ณธ ์ ๋ณด(์ด๋ฆ, ๊ฐ๊ฒฉ) ๊ด๋ฆฌ ๋ฐ ์ถ๋ ฅ ๊ธฐ๋ฅ |
| **์ฌ๊ณ ** | `Stock` | ํน์ ์ํ์ ์ฌ๊ณ ์๋ ๊ด๋ฆฌ ๋ฐ ํ์ ์ฌ๋ถ ํ์ธ |
| **ํ๋ก๋ชจ์ ์ฌ๊ณ ** | `PromotionStock` | ํ๋ก๋ชจ์ ์กฐ๊ฑด์ ๊ฐ์ง ์ฌ๊ณ ๊ด๋ฆฌ |
| **์ฌ๊ณ ๊ด๋ฆฌ** | `Inventory` | ๋ชจ๋ ์ํ๊ณผ ํ๋ก๋ชจ์ ์ฌ๊ณ ๋ฅผ ํตํฉ ๊ด๋ฆฌ |
| **์ฅ๋ฐ๊ตฌ๋** | `Cart` | ์ฌ์ฉ์ ์ฅ๋ฐ๊ตฌ๋ ๋ด ์ํ ๋ชฉ๋ก์ ๊ด๋ฆฌ |
| **์ฅ๋ฐ๊ตฌ๋ ํญ๋ชฉ** | `CartItem` | ๊ฐ๋ณ ์ํ ํญ๋ชฉ๊ณผ ์๋ ์กฐ์ ๊ธฐ๋ฅ ํฌํจ |
| **๊ฐ๊ฒฉ** | `Price` | ๊ฐ๊ฒฉ ์ฐ์ฐ(๊ณฑ์ , ๋ง์ , ๋ฐฑ๋ถ์จ) ๋ฐ ํฌ๋งท |
| **ํ๋ก๋ชจ์ ** | `Promotion` | ํน์ ์ํ์ ์ ์ฉํ ํ๋ก๋ชจ์ ์ ์ ๋ฐ ๊ฒ์ฆ |
| **์์์ฆ** | `Receipt` | ๊ตฌ๋งค ๋ด์ญ๊ณผ ์ด์ก, ํ ์ธ๊ธ์ก ๊ณ์ฐ ๋ฐ ์ถ๋ ฅ |
| **์ฃผ๋ฌธ** | `Order` | ์ฃผ๋ฌธ ์ ๋ณด ๊ด๋ฆฌ ๋ฐ ์ฃผ๋ฌธ ํญ๋ชฉ ์์ฑ |
| **์ฃผ๋ฌธ ํญ๋ชฉ** | `OrderItem` | ์ฅ๋ฐ๊ตฌ๋ ํญ๋ชฉ์ ์ฃผ๋ฌธ ํญ๋ชฉ์ผ๋ก ๋ณํ |
| **๊ฒฐ์ ** | `Payment` | ๊ฒฐ์ ์ ๋ณด ๋ฐ ํ ์ธ ๊ณ์ฐ ๊ด๋ฆฌ |
| **๊ฒฐ์ ํญ๋ชฉ** | `PaymentItem` | ๊ฐ๋ณ ๊ฒฐ์ ํญ๋ชฉ ๋ฐ ํ ์ธ ๊ธ์ก ๊ด๋ฆฌ |
| **ํ๋ก๋ชจ์ ์ ์ฑ ** | `PromotionPolicy` | ํ๋ก๋ชจ์ ์กฐ๊ฑด ์ ์ ๋ฐ ์กฐ๊ฑด ์ถฉ์กฑ ์ฌ๋ถ |---
## ๐ ์ ์ฒด ๊ธฐ๋ฅ ๋ช ์ธ### 1. **์ํ ๋ฐ ์ฌ๊ณ ๊ด๋ฆฌ**
- **์ํ ๊ด๋ฆฌ**: ์ํ์ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ์ ๊ธฐ์ค์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ๊ฐ ์ํ์ ์ฌ๊ณ ์๋๋ ํจ๊ป ๊ด๋ฆฌ๋ฉ๋๋ค.
- **์ฌ๊ณ ๊ด๋ฆฌ**: ์ํ์ ์ฌ๊ณ ๋ ๊ตฌ๋งค ์ ์ฐจ๊ฐ๋๋ฉฐ, ์ฌ๊ณ ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ๊ตฌ๋งคํ ์ ์์ต๋๋ค. ์ฌ๊ณ ๋ ์ํ๋ณ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.### 2. **์ฅ๋ฐ๊ตฌ๋ ๋ฐ ์ฃผ๋ฌธ**
- **์ฅ๋ฐ๊ตฌ๋**: ์ฌ์ฉ์๊ฐ ์ ํํ ์ํ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ๋ฉฐ, ์ํ์ ์๋๊ณผ ๊ฐ๊ฒฉ์ด ํ์๋ฉ๋๋ค.
- **์ฃผ๋ฌธ ์์ฑ**: ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ์ ๋ฐํ์ผ๋ก ์ฃผ๋ฌธ์ด ์์ฑ๋ฉ๋๋ค. ์ฃผ๋ฌธ ์์ฑ ์ ํ๋ก๋ชจ์ ์กฐ๊ฑด์ ์ ์ฉํ์ฌ ํ ์ธ ํํ์ ๊ณ์ฐํฉ๋๋ค.### 3. **๊ฒฐ์ ์์คํ **
- **์ต์ข ๊ฒฐ์ ๊ธ์ก ๊ณ์ฐ**: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ํ์ ๊ฐ๊ฒฉ๊ณผ ์๋์ ๋ฐํ์ผ๋ก ๊ฒฐ์ ๊ธ์ก์ด ๊ณ์ฐ๋๋ฉฐ, ํ๋ก๋ชจ์ ๋ฐ ๋ฉค๋ฒ์ญ ํ ์ธ ์ ์ฑ ์ด ๋ฐ์๋ฉ๋๋ค.
- **์์์ฆ ์ถ๋ ฅ**: ๊ฒฐ์ ํ ์์์ฆ์ ์ถ๋ ฅํ๋ฉฐ, ๊ตฌ๋งค ๋ด์ญ๊ณผ ์ต์ข ๊ฒฐ์ ๊ธ์ก์ด ์๋ด๋ฉ๋๋ค.
- **์๋ชป๋ ์ ๋ ฅ ์ฒ๋ฆฌ**: ์ฌ์ฉ์๊ฐ ์๋ชป๋ ๊ฐ์ ์ ๋ ฅํ ๊ฒฝ์ฐ `IllegalArgumentException`์ ๋ฐ์์ํค๋ฉฐ, ์ ์ ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ๋ค์ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค.### 4. **ํ๋ก๋ชจ์ ๋ฐ ํ ์ธ ์ ์ฑ **
- **ํ๋ก๋ชจ์ ์ ์ฉ**: ํ๋ก๋ชจ์ ์ 'Buy N Get 1 Free' ํํ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ค๋ ๋ ์ง๊ฐ ํ๋ก๋ชจ์ ๊ธฐ๊ฐ ๋ด์ ํฌํจ๋ ๊ฒฝ์ฐ ํด๋น ํ๋ก๋ชจ์ ์ด ์ ์ฉ๋ฉ๋๋ค.
- **ํ๋ก๋ชจ์ ์ฌ๊ณ ์ฐจ๊ฐ**: ํ๋ก๋ชจ์ ์ด ์ ์ฉ๋๋ ์ํ์ ํ๋ก๋ชจ์ ์ฌ๊ณ ์์ ์ฐ์ ์ฐจ๊ฐ๋๋ฉฐ, ํ๋ก๋ชจ์ ์ฌ๊ณ ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ผ๋ฐ ์ฌ๊ณ ์์ ์ฐจ๊ฐ๋ฉ๋๋ค.
- **ํ๋ก๋ชจ์ ์๋ด**: ํ๋ก๋ชจ์ ์ ์ฉ ๋์ ์ํ์ ๋ํด ํ์ํ ์๋์ ๋ ์ถ๊ฐ๋ก ๊ตฌ๋งคํ ๊ฒฝ์ฐ ํํ์ ๋ฐ์ ์ ์๋๋ก ์๋ดํฉ๋๋ค.### 5. **์๋ฌ ์ฒ๋ฆฌ ๋ฐ ์์ธ**
- **์๋ชป๋ ์ ๋ ฅ ์ฒ๋ฆฌ**: ์ฌ์ฉ์๊ฐ ์๋ชป๋ ๊ฐ์ ์ ๋ ฅํ๋ฉด `IllegalArgumentException`์ ๋ฐ์์ํค๋ฉฐ, ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ์ฌ๋ฐ๋ฅธ ์ ๋ ฅ์ ์ ๋ํฉ๋๋ค.
- **์ ํจํ์ง ์์ ์ํ**: ํ๋ก๋ชจ์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์๊ฑฐ๋, ์ฌ๊ณ ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ ์ ํ ์์ธ๋ฅผ ๋ฐ์์์ผ ์ฒ๋ฆฌํฉ๋๋ค.### 6. **๊ธฐํ**
- **์ถ๊ฐ ๊ตฌ๋งค ๋๋ ์ข ๋ฃ ์ ํ**: ์์์ฆ ์ถ๋ ฅ ํ ์ถ๊ฐ ๊ตฌ๋งค๋ฅผ ํ ์ง ๋๋ ์ข ๋ฃํ ์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
---
## ๐ ์์คํ ํ๋ฆ### ์ ์ฒด ํ๋ฆ
1. **ํ์ผ ์ฝ๊ธฐ**
- `promotions.md` ํ์ผ์ ํตํด ํ๋ก๋ชจ์ ๋ก์ง์ ์ค์ ํ๊ณ , `products.md`๋ฅผ ์ฌ์ฉํ์ฌ `Inventory`๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
2. **์นดํธ์ ์ํ ๋ด๊ธฐ**
- ์ฌ์ฉ์๊ฐ ์ํ์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ๊ณ , ์ฌ๊ณ ๋ฅผ ํ์ธํฉ๋๋ค.
3. **์ฃผ๋ฌธ ์์ฑ**
- ํ๋ก๋ชจ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํํ ์ ์ฉ ์ฌ๋ถ๋ฅผ ํ๋ณํฉ๋๋ค.
- ํ๋ก๋ชจ์ ์กฐ๊ฑด:
1. n+1 ํ์ฌ ์ํ ํฌํจ ์ฌ๋ถ
2. ์ ๊ฐ๋ก ๊ฒฐ์ ํด์ผ ํ๋ ์ํ ์ ๋ฌด
4. **๊ฒฐ์ ์ฒ๋ฆฌ**
- ๋ฉค๋ฒ์ญ ํ ์ธ ์ ์ฉ ์ฌ๋ถ์ ๋ฐ๋ผ ์ต์ข ๊ฒฐ์ ๊ธ์ก์ ๊ณ์ฐํฉ๋๋ค.
5. **์์์ฆ ๋ฐํ**
- ์ต์ข ๊ฒฐ์ ์๋ฃ ํ ์์์ฆ์ ์์ฑํ์ฌ ์ถ๋ ฅํฉ๋๋ค.---
## ๐งฉ ์ฃผ์ ๋ก์ง ๋ฐ ๋์์ธ ํจํด
### 1. **Callback Interface**๋ก ์ ๋ ฅ ์ ์ด
- `Order`์์ ๋ถ๊ธฐ๋ณ ์ ๋ ฅ ์ ์ด์ **Callback ํจํด**์ ์ฌ์ฉํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ ์ฐ์ฑ์ ๋์์ต๋๋ค.### 2. **Strategy ํจํด**์ผ๋ก ํ๋ก๋ชจ์ ์ ๋ต ์ ์ฉ
- ๊ฐ ํ๋ก๋ชจ์ ์ ๋ง๋ ์ ๋ต์ **ํฉํ ๋ฆฌ ๋ฐ ์ ๋ต ํจํด**์ผ๋ก ์ ์ฉํ์ฌ ์ ์ง๋ณด์์ฑ์ ๊ฐํํ์ต๋๋ค.### 3. **์ฑ๊ธํค ํจํด**์ผ๋ก `InventoryExtension` ์ค์
- `Inventory`๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ตฌ์ฑํ์ฌ, ํ ์คํธ ์ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ ํ์ฌ ํ ์คํธ ํจ์จ์ฑ์ ๋์์ต๋๋ค.---
## โ๏ธ ๋จ๊ณ๋ณ ์ฑ ์ ๋ถ๋ฆฌ
1. **์ํ ์กฐํ ๋ฐ ์ ํ** - ์ฌ์ฉ์๊ฐ ์ํ์ ์ ํํ๊ณ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํฉ๋๋ค.
2. **์ฌ๊ณ ํ์ธ ๋ฐ ํ๋ก๋ชจ์ ์ ์ฉ** - ์ํ์ ์ฌ๊ณ ๋ฅผ ํ์ธํ๊ณ , ํ๋ก๋ชจ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
3. **์ฅ๋ฐ๊ตฌ๋ ๊ตฌ์ฑ** - ์ ํ๋ ์ํ๊ณผ ์๋์ ๋ฐํ์ผ๋ก ์ฅ๋ฐ๊ตฌ๋๊ฐ ๊ตฌ์ฑ๋ฉ๋๋ค.
4. **์ฃผ๋ฌธ ์์ฑ** - ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ฐํ์ผ๋ก ์ฃผ๋ฌธ์ ์์ฑํ๊ณ , ํ๋ก๋ชจ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํํ์ ์ ์ฉํฉ๋๋ค.
5. **๊ฒฐ์ ** - ์ด์ก ๋ฐ ํ ์ธ ๊ธ์ก์ ๊ณ์ฐํ์ฌ ๊ฒฐ์ ๋ฅผ ์๋ฃํฉ๋๋ค.
6. **์์์ฆ ๋ฐํ** - ๊ฒฐ์ ํ ์์์ฆ์ ์ถ๋ ฅํฉ๋๋ค.์ด ๊ตฌ์กฐ๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง ๋ณด์์ฑ์ ํ์ธต ๋ ํฅ์์์ผฐ์ต๋๋ค.
---
## ๐ ์๊ฐ ๊ณ ์ ํ ์คํธ
์๊ฐ ์์กด ๋ก์ง ํ ์คํธ๋ฅผ ์ํด `DateTimeGenerator`๋ฅผ ์ฌ์ฉํ์ฌ `fixedMode`์ `nonFixedMode`๋ก ์๊ฐ์ ์ ์ดํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๊ฐ์ ๋ฏผ๊ฐํ ๊ธฐ๋ฅ์ ์ผ๊ด๋๊ฒ ํ ์คํธํ ์ ์์ต๋๋ค.
---
## ๐ป ์ค์น ๋ฐ ์คํ ๋ฐฉ๋ฒ
1. **ํด๋ก **
ํ๋ก์ ํธ๋ฅผ ํด๋ก ํฉ๋๋ค:
```bash
git clone https://github.com/KNU-K/java-convenience-store-7-KNU-K
```2. **๋น๋ ๋ฐ ์คํ**
Gradle์ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ๋น๋ ๋ฐ ์คํํฉ๋๋ค:
```bash
./gradlew build
./gradlew run
```3. **ํ ์คํธ ์คํ**
๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค:
```bash
./gradlew test
```