키오스크 팀프로젝트 해설을 보며 : 깨달은 점, 보충

김재현·2023년 11월 8일
0

TIL

목록 보기
25/88
post-thumbnail

오늘은 키오스크 팀과제 해설 공부를 하며 다시 구조를 구상해봤고, 스탠다드 수업과 혼자서 내 IP를 뒤적거리며 놀아버렸다. 내 IP에 들어가서 공유기 설정하면서 바뀌니까 신기하더라! 외부에서의 IP 접속은 나중의 즐거움으로 남겨뒀다.


깨달음 점

1. 메서드

메서드를 void가 아니라 String 등의 타입으로 선언하고
변수 = 메서드() 이렇게 하면 메서드가 호출되면서 실행시켜 사용자가 값을 입력하고
입력, 처리 후 return값을 변수로 넣어줄 수 있구나!
이런건 알면서도 생각을 못했네.

2. Map

Map을 forEach로 돌려서 하나씩 뺄 수도 있구나?
Map구조.forEach( (key, value) -> {로직} )
이렇게 사용하더라 (key, value는 바꿀 필요 없이 그대로 사용)
이런 것은 원리를 알고 쓸 수 있다기 보다는... 사용법을 외우고 익숙해지는게 더 빠른 공부 방법이라 생각한다. 코드를 많이 보고 익숙해지자!

3. Static

id값은 static 변수를 사용해서..!!!
(static은 모든 객체가 공유하는 값 -> 객체 생성시마다 변하지 않음) -> id는 따로 있고, static int idSeq =1; 선언해놓고
생성자 선언될때마다 this.id = idSeq++; 로 하나씩 올려줌
이런 생각을 할 수 있다는 것은 그만큼 고민을 많이 했다는게 아닐까.
경험에서 나오는 힘?

다 듣고나니 역시 설계 부분이 중요하구나.
어떤 흐름을 따라갈지, 어떻게 구성할지 등등.
이런걸 잘 하려면 뭘 알아야 잘 하지 싶다... 알려면 다른 코드도 많이 보자! 내 코드의 문제점도 찾아보고 혼자 연습도 해보고!!

나도 한번 코드 짤 시간까진 없으니 키오스크의 흐름, 구조만 설계해보는 시간을 가져봐야겠다.


설계만 해보기!

혼자서 설계만 해봤다. 실제 코딩은 다르게 흘러갈 수도 있고, 예상 외로 막히는 부분이 있을 수도 있을 것이다. 하지만 이렇게 머릿속으로 구조를 그려볼 수 있다는 것에 내가 성장을 하긴 했구나 라는 것이 느껴진다. (해설을 봐도 못하던 시절이 있거늘)

Main 클래스

  • Main: 자바의 집과 같은 존재. 여기서 시작해서 각 메서드 호출.
  • 호출이 끝다면 다시 돌아오도록 설계.

displayMainMenu를 여기에 넣고 -> handling은 따로

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 -> 관리프로그램 담당


관련 포스팅

Previouse Post

profile
I live in Seoul, Korea, Handsome

0개의 댓글