기존 main 함수에서 처리하던 흐름에 객체 지향 설계를 적용하여 Kiosk 클래스에서 프로그램의 흐름을 관리하고 구조 설계를 강화합니다.
객체 지향 개념을 적용: Kiosk 클래스를 활용하여 프로그램의 흐름을 관리하고 유지보수를 용이하게 함
순서 제어 로직 분리: 기존 main 함수에서 수행하던 역할을 Kiosk 클래스의 start() 메서드에서 처리
유저 입력 관리: Kiosk
클래스에서 사용자의 입력을 받아 메뉴 선택, 장바구니 기능, 결제 및 종료를 수행
유효성 검사: 입력값의 올바른 범위를 확인하여 오류를 방지, 유효하지 않은 입력에 대해선 오류 메시지 출력
뒤로가기 기능 제공: 0을 입력하면 이전 단계로 돌아가거나 프로그램을 종료할 수 있도록 구현
CLI 키오스크 프로젝트의 구성입니다.
📂 src
└─ 📂 common
│ ├── Menu.java (메뉴 Enum 관리 클래스)
│ ├── MenuItem.java (메뉴 정보 관리 클래스)
│ └── test.txt (음식 메뉴 목록 관리)
└── 📂 lv3.kiosk
├── Kiosk.java (키오스크 관리 클래스)
└── Main.java (메인 클래스)
Kiosk 클래스는 기존 main클래스에서의 흐름을 관리하는 키오스크 시스템의 핵심적인 역할을 담당합니다. 객체 지향 설계(캡슐화, )를 적용하여 프로그램의 구조를 모듈화하고, 데이터와 로직을 보다 효율적으로 관리합니다.
🔑 Kiosk 클래스
menuList: MenuItem 객체 리스트로, 음식 메뉴 정보를 저장합니다.
mainFlag: 프로그램 실행 여부를 제어하는 플래그 변수입니다.
menuFlag: 음식 메뉴 선택 시 반복 여부를 결정하는 변수입니다.
InputStream을 사용하여 파일을 읽고,
BufferedReader를 활용해 한 줄씩 데이터를 가져온 후,
parseMenuItem()을 문자열을 파싱하여 MenuItem 객체로 변환하여 키오스크 클래스에서 관리하는 menuList
를 List<MenuItem>
으로 초기화합니다.
void printMenu()
키오스크의 메뉴를 출력합니다.
void start()
사용자의 입력에 따라 switch문을 통해 해당되는 기능을 수행하는 역할을 합니다.
기존 Main클래스의 흐름 중 일부를 start()메서드에서 수행합니다.
void viewMenuList()
텍스트 파일에서 가져온 List<MenuItem>
음식의 정보를 출력합니다.
String inputMenu()
사용자의 입력을 받아 리턴합니다.
MenuItem parseMenuItem()
파일에서 한 줄씩 가져와 파싱을 통해 MenuItem을 리턴합니다.
// main로직
while(MainFlag){
// 메뉴보기
kiosk.printMenu();
try{
kiosk.start()
}
catch(){
}
// kiosk.start() 로직
switch(){
case VIEW_MENU -> 음식 메뉴 보기
while(menuFlag){
switch(Menu)
선택한 메뉴 출력
}
case CART -> 장바구니
case CHECKOUT -> 주문(결제)
case EXIT -> 종료
kiosk클래스의 속성 flag를 이용해서 반복문 관리
객체 지향 설계 적용 방법
main 함수에서 전체 프로그램의 흐름을 직접 제어
메뉴 데이터를 개별적으로 관리하며, 구조화 어려움
사용자 입력 처리 및 메뉴 출력이 main에서 실행됨 (유지보수 어려움)
Kiosk 클래스를 생성하여 Main 프로그램의 흐름을 제어
MenuItem 객체를 활용해 메뉴 정보를 구조적으로 관리
- 캡슐화 적용
start() 메서드를 도입하여 실행 흐름을 모듈화
- 책임 분리
inputMenu(), viewMenuList() 등의 SRP가 적용된 메서드로 기능을 세분화하여 유지보수 용이
- 유지 보수