Skip to content

Repository files navigation

🧃 FruitMix: Custom Juice Supply Management System

📖 Overview

FruitMix는 다양한 과일 원료를 조합하여 고객 맞춤형 주스를 생산·납품하는 시스템입니다.
카페나 레스토랑 등의 클라이언트가 원하는 과일 조합을 주문하면,
관리자는 손쉽게 재고를 관리하고, 새로운 믹스 메뉴를 생성할 수 있습니다.

이 프로젝트는 소프트웨어공학의 8단계 구현 절차를 기반으로
요구분석부터 테스트까지 전 과정을 실제 개발 흐름에 맞춰 시각화하였습니다.


📌 주요 구현 단계

1️⃣ 주제 선정 및 계획서 작성

  • 프로젝트 주제: 맞춤형 과일주스 납품 관리 시스템
  • 목표: 납품 효율 향상, 주문 자동화, 재료 조합 기능 확장
  • 핵심 아이디어:
    • 고객별 맞춤 조합 주스 제공
    • 원재료 관리 및 자동 납품 일정 확인
    • 디자인 패턴 기반의 유연한 시스템 구조

2️⃣ 요구사항 분석서 및 설계서 작성

기능 요구사항

구분 설명
FR-1 새로운 과일(원재료)을 등록할 수 있어야 한다.
FR-2 다양한 과일을 혼합하여 맞춤형 주스를 생성할 수 있어야 한다.
FR-3 고객(카페, 레스토랑)의 주문을 등록하고 관리해야 한다.
FR-4 주문 변경 시 관리자에게 자동 알림이 전송되어야 한다.
FR-5 각 조합별 원가와 판매가를 계산할 수 있어야 한다.

비기능 요구사항

  • 유연성: 새로운 과일이 추가되어도 기존 코드 수정이 최소화되어야 함.
  • 재사용성: 조합 로직을 다른 프로젝트에서도 활용 가능하도록 모듈화.
  • 확장성: 납품, 재고, 고객 관리 모듈이 독립적으로 동작해야 함.

3️⃣ UML 다이어그램 (3~5개)

📘 클래스 다이어그램 (예시)

Fruit (추상 클래스) ├─ Mango ├─ Orange ├─ Banana

Juice (추상 클래스) └─ CustomJuice ├─ addFruit(Fruit) ├─ calculatePrice() ├─ getDescription()

Client ├─ name ├─ orderList ├─ notify()

OrderManager ├─ createOrder() ├─ updateOrder() ├─ notifyClient()

yaml 코드 복사

📘 Use Case 다이어그램

  • Actor: Manager, Client
  • Use Cases: 주문 등록, 재료 추가, 믹스 생성, 알림 수신, 납품 확인

📘 시퀀스 다이어그램

  1. Client → OrderManager: 주문 생성 요청
  2. OrderManager → JuiceFactory: 주스 조합 생성
  3. JuiceFactory → Fruit: 원재료 객체 생성
  4. OrderManager → Client: 주문 완료 알림

4️⃣ 설계 원리 및 클래스 설계 원칙 적용

원칙 적용 예시
SRP Fruit 클래스는 과일 속성만, Juice는 조합 로직만 담당
OCP 새로운 과일을 추가해도 기존 코드 수정 없이 확장 가능
LSP Fruit을 상속받은 모든 과일 클래스가 동일하게 동작
ISP 관리자 / 고객 인터페이스를 분리
DIP 상위 모듈이 Fruit 추상 클래스에 의존하도록 설계

5️⃣ 아키텍처 & 프레임워크 설계

  • 구조: MVC 패턴 기반
    • Model: Fruit, Juice, Order, Client
    • View: 콘솔 / GUI 주문 인터페이스
    • Controller: OrderManager (주문 및 납품 관리)
  • 데이터 관리: JSON 파일 기반 (주문 내역 및 재고 저장)
  • 기술 스택: Python 3.x / UML 모델링 도구 (StarUML)

6️⃣ 디자인 패턴 적용

패턴 적용 목적 적용 예시
Factory Pattern 과일 객체 생성을 단순화 FruitFactory.createFruit("Mango")
Decorator Pattern 주스에 과일을 점진적으로 추가 CustomJuice(base).addFruit(Mango()).addFruit(Banana())
Observer Pattern 주문 변경 시 관리자에게 자동 알림 Client.notify() 호출 트리거

7️⃣ 클래스 코드 구현 (예시)

class Fruit:
    def __init__(self, name, price):
        self.name = name
        self.price = price

class Juice:
    def __init__(self):
        self.ingredients = []

    def addFruit(self, fruit):
        self.ingredients.append(fruit)

    def calculatePrice(self):
        return sum(f.price for f in self.ingredients)

    def describe(self):
        names = [f.name for f in self.ingredients]
        return f"Custom Juice with {' + '.join(names)}"

# 예시 실행
juice = Juice()
juice.addFruit(Fruit("Mango", 2.5))
juice.addFruit(Fruit("Orange", 1.5))

print(juice.describe())      # Custom Juice with Mango + Orange
print(juice.calculatePrice()) # 4.0

About

소프트웨어공학에 대한 요구사항 분석부터 테스트까지의 과정을 정리

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages