키오스크(개인 프로젝트) 만들기 마무리 : 함수 호출을 이용한 중복코드 제거

김재현·2023년 10월 23일
0

TIL

목록 보기
13/88
post-thumbnail
  • 프로젝트명 : "키오스크 만들기"
  • 프로젝트 소개 : 메뉴판을 보고 주문할 수 있는 Java 프로그램입니다.
  • 사용 기술: #Java
    GitHub: https://github.com/k-jaehyun/Kiosk

개인과제를 제출했다.

추가 기능으로 중복된 주문 개수를 합치는 것,
그리고 중복코드를 다른 클래스에 넣어서 출력시켜 길이를 줄여보는데 성공했다.

먼저 중복된 주문에 대해서는 아래와 같이 Map을 활용해보았다.

//중복 카운트를 위한 맵 생성
Map<Product,Integer> productCount = new HashMap<>();

//중복 카운트
for (Product check : order.orderMenu) {
	if (productCount.containsKey(check)) {
		int count = productCount.get(check);
		productCount.put(check,count+1);
	} else {
		productCount.put(check,1);
	}
}

//저장된 맵 출력!!
for (Map.Entry<Product,Integer> check: productCount.entrySet()) {
	System.out.println(
    	check.getKey().name 
        + " | W " + check.getKey().price*check.getValue() 
        + " | " + check.getValue()+" 개 | "
        + check.getKey().explanation
        );
}

익숙하지 않던 제네릭도 이덕분에 활용법을 알게되었다.

출력은 어떻게 하지 싶어서 찾아봤더니 Entry와 entrySet()이란 기능이 있다는 것도 알게되고...
배운것 뿐만 아니라 더 잘 활용하기 위해 검색하다보니 이제 코딩을 어떻게 해야할지 감이 좀 온다고 해야할까?

중복 코드는 아래와 같이 제거했다

public class Print {

    public void hey(Scanner sc, Order order, Product d, String a, double b, String c) {

        System.out.println(a + "| " + b + " | " + c + "\n" +
                "위 메뉴를 장바구니에 추가하시겠습니까?\n" +
                "1. 확인        2. 취소");

        String addOrNo = sc.nextLine();

        againChoice1_1:
        while (true) {
            switch (addOrNo) {
                case "1":
                    System.out.println(a + "가 장바구니에 추가되었습니다.\n");
                    break againChoice1_1;
                case "2":
                    System.out.println("취소되었습니다.");
                    break againChoice1_1;
                default:
                    System.out.println("1번 혹은 2번을 입력하세요.");
                    addOrNo = sc.nextLine();
            }
        }

        if (addOrNo.equals("1")) {
            order.orderMenu.add(d);

        }

    }

}

이 클래스에 있는 함수를 Main에서 불러와서 쓰면 되는것이다..!!
앞에서 쓴 변수, 참조변수들을 어떻게 연결시켜야 할지 고민하다가
찾아보았더니 이런게 있더라! 분명 배웠는데 어떻게 활용할지 모르다가 써보니 이제야 알겠다.

어떻게든 구현한 나의 키오스크

개인과제를 제출하고 해설이 올라왔다.

과제 해설에서는 Main 클래스에 여러가지 함수를 만들어서
필요한 화면이 있으면 그 함수를 실행시키고,
그 함수는 다른 클래스와 연결되어 있는데, 그 클래스는 배열과 제네릭을 활용해서 만들었다.
와 이게 이렇게 하는거였구나!! 하면서 흥미롭게 확인하고 있다.

한편으로는 이런 방법으로 해야했구나~ 라는걸 좀 더 일찍 알았다면 나도 이런 방법으로 고민해봤을텐데! 라는 생각도 들며 아쉽다.

과제 모범답안을 한번 쭉 보고, 내가 직접 새로 하나 만들어보고 싶다.

근데 강의 정리도 해야하고... 물리적인 시간이 부족하다ㅜㅜ
매일 2~3시에 잤는데도 부족하다..! 내가 너무 느린걸까 싶기도하네
하지만 노베이스인데 더 노력하는게 맞지. 서둘러 쫓아가자!


관련 포스팅

Previouse Post

Following Post

profile
I live in Seoul, Korea, Handsome

0개의 댓글