- 프로젝트명 : "키오스크 만들기"
- 프로젝트 소개 : 메뉴판을 보고 주문할 수 있는 Java 프로그램입니다.
- 사용 기술: #Java
GitHub: https://github.com/wkdehf217/RealKioskProject.git
오늘은 키오스크 팀과제 해설 공부를 하며 다시 구조를 구상해봤고, 스탠다드 수업과 혼자서 내 IP를 뒤적거리며 놀아버렸다. 내 IP에 들어가서 공유기 설정하면서 바뀌니까 신기하더라! 외부에서의 IP 접속은 나중의 즐거움으로 남겨뒀다.
메서드를 void가 아니라 String 등의 타입으로 선언하고
변수 = 메서드()
이렇게 하면 메서드가 호출되면서 실행시켜 사용자가 값을 입력하고
입력, 처리 후 return값을 변수로 넣어줄 수 있구나!
이런건 알면서도 생각을 못했네.
Map을 forEach로 돌려서 하나씩 뺄 수도 있구나?
Map구조.forEach( (key, value) -> {로직} )
이렇게 사용하더라 (key, value는 바꿀 필요 없이 그대로 사용)
이런 것은 원리를 알고 쓸 수 있다기 보다는... 사용법을 외우고 익숙해지는게 더 빠른 공부 방법이라 생각한다. 코드를 많이 보고 익숙해지자!
id값은 static 변수를 사용해서..!!!
(static은 모든 객체가 공유하는 값 -> 객체 생성시마다 변하지 않음) -> id는 따로 있고, static int idSeq =1; 선언해놓고
생성자 선언될때마다 this.id = idSeq++; 로 하나씩 올려줌
이런 생각을 할 수 있다는 것은 그만큼 고민을 많이 했다는게 아닐까.
경험에서 나오는 힘?
다 듣고나니 역시 설계 부분이 중요하구나.
어떤 흐름을 따라갈지, 어떻게 구성할지 등등.
이런걸 잘 하려면 뭘 알아야 잘 하지 싶다... 알려면 다른 코드도 많이 보자! 내 코드의 문제점도 찾아보고 혼자 연습도 해보고!!
나도 한번 코드 짤 시간까진 없으니 키오스크의 흐름, 구조만 설계해보는 시간을 가져봐야겠다.
혼자서 설계만 해봤다. 실제 코딩은 다르게 흘러갈 수도 있고, 예상 외로 막히는 부분이 있을 수도 있을 것이다. 하지만 이렇게 머릿속으로 구조를 그려볼 수 있다는 것에 내가 성장을 하긴 했구나 라는 것이 느껴진다. (해설을 봐도 못하던 시절이 있거늘)
private static MenuContext menuContext;
private static ManagementContext managementContext;
이렇게 따로 선언해놔야 어디서든 쓸 수 있다.
public static void main(String[] args) {
menuContext = new MenuContext();
managementContext = new ManagementContext();
displayMainMenu();
}
여기서 생성자 생성.
public MenuContext() {
menus = new HashMap<>();
menuItems = new HashMap<>();
cart = new ArrayList<>();
totalPrice = 0.0;
orderNumber = 0;
initializeMenuItems(); // 메뉴 및 상품메뉴 초기화
}
이렇게 해야 처음에 생성자가 호출됨 -> 메뉴랑 상품이 만들어지면서 다른 것에 영향 X
(주소값을 delete하는 참사가 재발되지 않도록!!)
Main -> static으로 menucontext,managementContext 선언
main method -> 각 생성자 호출하면서 호출 시에 초기화 되도록 메서드 넣어놓기.
Menu: name, description -> 메뉴의 형식을 갖다쓴다.
메뉴 이름이 메뉴의 id로 사용되도록.
메뉴를 만들기 위한 생성자. (this.name = name, this.description = description)
Order -> 주문한 것을 여기에 담는 용도.
주문요청사항 String
주문 시간 date메서드 -> 주문을 완료시킨 시점에 생성되도록
완료 시간 -> 관리자의 완료시점에 생성되도록
주문 번호 -> 주문시점에 생성 -> 이것을 id로, 객체가 생성되어 계속 저장되도록(cart로 만들되, cart는 clear되니까 new로 새롭게 만들 것)
카트 (menu를 List로) -> 카트에 담을 때 생성 -> 주문 완료 된 뒤 비워짐
totalPrice = 0;
과리자가 완료시킨 여부 = false -> 관리자가 완료시키면 true 로
Item: Menu를 상속(extends) + price +id -> 아이템의 형식을 갖다쓴다. item마다 id를 따로 생성. id는 생성자 호출시마다 ++되도록 설정. -> 생성자를 호출하여 item을 담아서 저장해놓고 이걸 갖다가 사용해야함(프린트 할 때 또 다시 생성자가 호출되지 않도록)
아이템 만들기 위한 생성자(3개는 기입, id는 자동생성)
id는 객체 생성시에도 초기화 되지 않도록 static으로 선언.
MenuContext // 메뉴 생성 메서드. 필요하면 변수 갖다 쓰고 Order랑 연동.
Menu(버거,음료,아이스크림)를 기입해서 생성(생성자로)하고 리스트로 묶음.(add)
-> List<Menu> mainMenu
(새로운 메뉴 종류 생성시에 여기에 add)
Item을 기입해서 생성자로 생성하고 메뉴종류별 리스트로 묶음 List<Item> (리스트에 add)
(새로운 Item 생성시에 이 리스트에 add 할 것)
-> 이걸 map으로? (key: menuName, value: List<Item>) (map에 put)
(새로운 메뉴 생성시에 새로운 list에 add 한 뒤 여기에 put) -> 이것도 메서드로 뺄 수 있음
OrderContext -> display 담당
ManagementContext -> 관리프로그램 담당