230607_ 호텔 예약 프로젝트

hoy_·2023년 6월 7일
0

Today, I Learned

목록 보기
14/36

1. 오늘의 일정

  1. 팀 프로젝트 호텔 예약 프로그램 구상 및 준비




2. 배운 내용

  1. 개인 프로젝트였던 키오스크의 연장선인데, 미리 접해본 내용이어서 구조 잡는 게 더 수월했던 것 같다.

  2. getter의 쓰임새를 알게 됐다. 이론으로만 이해했던 객체지향을 구현하는 것에 도움이 된 것 같다.




3. 발생한 오류

  1. 구현해야 할 기능이 무엇인지 추려내는 것부터 쉽지가 않다. 호텔 예약 프로그램은 고객 시점에서 사용하는 호텔 키오스크와 비슷한 느낌이었는데, 예외처리 해줄 부분이 많다.

같은 날짜에 같은 호실을 예약할 수 없도록 검증하는 부분

public void inputReservationInformation(String id, String room, String customerName, 
						String phoneNumber, String appointmentDate, int price) {
        if (reservationAvailable(room, appointmentDate)) {

            Calendar calendar = Calendar.getInstance();
            Date date = calendar.getTime();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
            sdf.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));
            String now = sdf.format(date);

            ReservationInformation reservationInformation = new ReservationInformation(room, 
            customerName, phoneNumber, appointmentDate, now);
            hotelList.put(id, reservationInformation);
            asset += price; // 방 가격을 호텔 자산 총액에 더한다.
            System.out.println("예약이 완료되었습니다.\n");
            System.out.println("예약번호 : " + id);
        } else {
            System.out.println("해당 객실은 이미 예약된 날짜입니다. 
            다른 날짜나 다른 객실을 선택해주세요.\n");
        }
    }

필요한 정보는 getter로 가져올 수 있게 해놓았는데, 정작 그 정보가 담긴 객체가 메서드의 매개변수로 전달받아 생성되기 때문에 다른 메서드에서 사용할 수 없다는 문제가 있었다.
하나의 메서드에는 하나의 기능을 담는 게 좋다고 하여 추가와 검증 기능을 하는 메서드를 따로 만들고 싶었다. 이 때문에 꽤 오랜 시간 고민했고 위와 같은 결과가 나왔다.
결국 두 기능은 합쳐졌지만 중복 예약 검증은 예약을 추가하는 구간밖에 사용되지 않기 때문에 오히려 깔끔하게 된 것 같기도 하다.




4. 앞으로의 나는

  1. 컨벤션에 대해 조금 더 고민해보고, 사용하지 않는 코드나 로직을 정리해가며 조금 더 보기 좋게 만들어야겠다.
  2. 전에 git을 사용해 본 적이 있는데 한두 번 가지고 완벽히 다룰 수 있을 거란 생각은 착각이었던 것 같다. 코드를 적는 시간만큼 github에서 헤매는 시간이 상당하다. 대충 어느 문제로 오류가 나는지는 짐작되지만 ide에서 다루기가 쉽지 않다.
profile
배우는 사람

0개의 댓글