팀 프로젝트 호텔 예약 프로그램 구상 및 준비
개인 프로젝트였던 키오스크의 연장선인데, 미리 접해본 내용이어서 구조 잡는 게 더 수월했던 것 같다.
getter의 쓰임새를 알게 됐다. 이론으로만 이해했던 객체지향을 구현하는 것에 도움이 된 것 같다.
같은 날짜에 같은 호실을 예약할 수 없도록 검증하는 부분
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로 가져올 수 있게 해놓았는데, 정작 그 정보가 담긴 객체가 메서드의 매개변수로 전달받아 생성되기 때문에 다른 메서드에서 사용할 수 없다는 문제가 있었다.
하나의 메서드에는 하나의 기능을 담는 게 좋다고 하여 추가와 검증 기능을 하는 메서드를 따로 만들고 싶었다. 이 때문에 꽤 오랜 시간 고민했고 위와 같은 결과가 나왔다.
결국 두 기능은 합쳐졌지만 중복 예약 검증은 예약을 추가하는 구간밖에 사용되지 않기 때문에 오히려 깔끔하게 된 것 같기도 하다.