1. 프로젝트 개요
- 스파르타 코딩클럽 내일 배움 캠프 스프링_3기 자바 팀 과제
- 본 서비스를 이용하여 호텔 예약, 조회, 취소를 할 수 있다.
- CLI로 구현된 Service
2. 프로젝트 요구 명세서
과제 개요
- 호텔 예약 프로그램
- 필수 요구 사항
- 호텔은 여러 객실, 보유 자산을 가지고 있다.
- 객실은 객실 당 하루에 한 사람만 예약이 가능하다.
- 객실은 크기, 숙박비를 가진다.
- 예약은 객실, 고객의 이름, 고객의 전화번호, 예약 날짜를 가지고 있다.
- 전화번호 제한(XXX-XXXX-XXXX) 정규 표현식 (선택)
- 예약 날짜 ****
- 날짜는 ISO 8601 형식으로 조합된 UTC 날짜 및 시간 예) 2016-10-27T 17:13:40+00:00
- 고객은 이름, 전화번호, 소지금을 가진다.
- 고객 소지금보다 비싼 방은 예약 불가
- 호텔은 모든 예약 목록을 조회할 수 있다.
- 고객은 자신의 예약 목록을 조회 할 수 있다.
- 예약 번호로 예약 내역을 조회한다
- 고객은 자신의 예약을 취소할 수 있다.
- 고객이 호텔 예약 시에 예약 번호(id)를 반환 (uuid 활용)
- 고객이 호텔 예약에 성공하면 예약 번호(id)를 받는다.
- 고객이 예약 목록을 조회 시 예약 번호도 같이 조회된다.
- 고객이 예약 취소 시 예약 번호를 통해 자신의 특정 예약을 취소한다.
- 필수 요구 사항
3. 개발 인원 및 팀명
- 4명
- 최재석(팀장), 권준혁(팀원), 장동하(팀원), 정성호(팀원)(본인)
- 팀명: 9발업 저글링
4. 개발 기간
- 개발 시작 일자: 2023년 10월 24일
- 개발 완료 일자: 2023년 10월 27일
5. 개발 언어
- Java
- OpenJDK version 17.0.8.1
6. 개발 환경
- intelliJ IDEA Ultimate
7. 개발 시 담당 업무
개발시 담당했던 업무는 dao 패키지재부의 ReservationDAO와 domain 패키지 내부에서 Hotel Room 클래스의 구상을 담당했으며 개발기간에 주로 담당했던 업무는 RservaitonDAO의 클래스 작성이다.
ReservationDAO는 입력값에 대한 전반적인 데이터 처리를 담당하는 클래스이며 Hotel 클래스 객체내부에 있는 Reservation 클래스와 Room 클래스의 정보를 담은 객체의 데이터값을 반환 및 프로젝트에서 예약, 조회 삭제등을 담당하는 클래스이다.
8. 개발 시 주요 고민
개발시 주로 했던 고민은 Hotel 객체에 데이터입력을 어떤 방식으로 해야 하는지에 대한 고민을 주로 했다. Room 클래스의 그날의 방 예약 현황을 처리하는 과정에서의 고민이 예약, 조회, 삭제까지 이어지기에 어떤 Collection을 사용해야 되는지 결정하는데 신중했다. 또한 호텔 예약 특성상 월별로 예약을 받을 것인지 연도 단위로 예약을 받을 것인지, 윤년을 적용할 것인지 등등 여러 고민등을 했다.
9. 고민에 대한 해결
주로 했던 고민 중에 제일 중요했던 고민은 Collection 사용이다. HashMap을 사용해서 Value 값으로 월별요일값을 넣을 수 있지만 새로운 시도였고 Room 클래스에는 고객 명단이 없고 방이 예약돼 있는지 확인만 가능했기에 불가능하다고 생각했다. 따라서 ArrayList로 Room 객체의 index를 요일로 설정해서 처리하는 과정을 생각했고 그 방식을 적용하여 Hotel 객체 내부의 Room 객체를 관리했다. 프로젝트를 완료한 시점에서 바라본다면 HashMap의 Value 값을 방이 예약되어 있는 요일체크 기능으로 해서 처리할 수 있는 방법도 있었다.
호텔 예약을 월별로 받을 것인가 연도로 받을것인가에 대한 부분은 팀회의를 통해 월별로 받는것으로 결정했다. 그 이유는 년도로 받기보다 일단 월별로 먼저 받고 기능구현을 완성한 후 년도로 바꿀 생각이었지만, 프로젝트를 월별 예약기능으로 완성 후에 생각보다 추가해야 할 기능도 많고 연도별로 기능을 바꾸면 협업 특성상 다른 기능을 맡은 팀장 및 팀원분이 수정을 다시 처음부터 해야 했기에 결국 월별로 기능을 완성하고 마무리했다.
10. 느낀 점
이번 프로젝트는 협업 중심의 프로젝트여서 그런지 구상부터 마지막 마무리 단계까지 모든 게 협업이라 기능구현할 때도 하나를 구현하려면 회의를 거처 구현하려는 메서드가 어떤 기능인지 또는 파라미터값은 어떤 방식으로 할 것인지 마지막에 리턴값이 있는지 체크를 하면서 구현을 했고 그 메서드를 테스트를 해야겠기에 TDD를 통해 테스트를 하면서 진행했지만 그래도 이런 부분들이 아직 익숙지 않기에 평소라면 금방 구현했어야 할 기능도 시간이 좀 걸려서 구현했던 것 같다. 하지만 이번 프로젝트를 하면서 객체지향의 구상도를 경험해 보고, LocalDate의 클래스를 사용해 보면서 배웠던 부분이 많아서 실력적으로 좋은 향상이 있었던 프로젝트였다.
11. GitHub URL
Url: https://github.com/jshstar/hotel-reservation
'프로젝트' 카테고리의 다른 글
Spring ToDo project (0) | 2023.11.21 |
---|---|
Spring Board project (0) | 2023.11.06 |
Java Team Project Hotel KPT회고 (0) | 2023.10.31 |
Java Project Kiosk (0) | 2023.10.30 |
8toZ 미니프로젝트 KPT회고 (1) | 2023.10.12 |