사이먼's 코딩노트
[Java] 호텔 예약 관리 프로그램 제작(9) 본문
[호텔 예약 관리 프로그램 제작]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 깃허브 리포지터리 주소 : https://github.com/psm817/hotel_booking_proj
[Container에 각 Service 추가]
- 프로그램 제작(8)에 이어서 이번에는 각각의 Service 클래스와 패키지를 추가하여 패키징 분리를 계속해서 진행해봅시다.
- Service의 역할은 각 Controller에서 Dao를 통해 리스트에 관련된 기능들을 수행하기 전에 그 사이에 거쳐가는 하나의 직원과 같은 역할을 한다.
- 이렇게 되면 프로그램의 모든 진행 방향이 "Main -> App -> Controller -> 각 Controller -> Container -> 각 Service -> Dao -> 각 Dao" 의 순서대로 진행된다.
- 먼저, Container에서 각 Service로 연결이 가능하도록 객체 변수를 생성하고 생성자를 통해 객체를 생성한다.
package org.example.container;
import org.example.dao.BookingDao;
import org.example.dao.GuestDao;
import org.example.dao.RoomDao;
import org.example.service.BookingService;
import org.example.service.GuestService;
import org.example.service.RoomService;
public class Container {
public static BookingDao bookingDao;
public static RoomDao roomDao;
public static GuestDao guestDao;
public static BookingService bookingService;
public static RoomService roomService;
public static GuestService guestService;
static {
bookingDao = new BookingDao();
roomDao = new RoomDao();
guestDao = new GuestDao();
bookingService = new BookingService();
roomService = new RoomService();
guestService = new GuestService();
}
}
[BookingService 생성]
- Container에서 각 Service 객체를 생성했다면, 이제는 각각 Service.java 클래스를 구현해야한다.
- 먼저 BookingService.java 클래스에는 BookingController에서 선언된 메서드의 중복된 사용을 최소화하기 위해서 비슷한 기능들은 하나로 모아 메서드를 선언해주고 BookingDao를 연결하여 해당 메서드를 다시 bookingDao에서 호출할 수 있도록한다.
package org.example.service;
import org.example.Container;
import org.example.dao.BookingDao;
import org.example.dto.Booking;
import org.example.dto.Room;
import java.util.List;
public class BookingService {
private BookingDao bookingDao;
public BookingService() {
bookingDao = Container.bookingDao;
}
public Room getRoomsByNum(int roomNum) {
return bookingDao.getRoomsByNum(roomNum);
}
public int getRoomsIndexByNum(int roomNum) {
return bookingDao.getRoomsIndexByNum(roomNum);
}
public int getBookingsByName(String name) {
return bookingDao.getBookingsByName(name);
}
public List<Booking> getForPrintBookings() {
return bookingDao.getForPrintBookings();
}
}
- getRoomsByNum() 메서드는 객실번호를 매개변수로 받아 객실번호를 이용하여 객실의 정보를 가져오는 역할을 한다.
- getRoomsIndexByNum() 메서드는 객실번호를 매개변수로 받아 객실번호를 이용하여 rooms List의 인덱스 번호를 가져오는 역할을 한다.
- getBookingsByName() 메서드는 회원 이름을 매개변수로 받아 회원 이름을 이용하여 예약된 bookings List를 정수값으로 가져온다.
- getForPrintBookings() 메서드는 전체 bookings List를 가져오는 역할을 한다.
package org.example.dao;
import org.example.Container;
import org.example.dto.Booking;
import org.example.dto.Room;
import java.util.ArrayList;
import java.util.List;
import static org.example.controller.Controller.loginedGuest;
public class BookingDao extends Dao {
public List<Booking> bookings;
public BookingDao() {
bookings = new ArrayList<>();
}
public void add(Booking booking) {
bookings.add(booking);
lastId++;
}
public Room getRoomsByNum(int roomNum) {
int index = getRoomsIndexByNum(roomNum);
if(index != -1) {
return Container.roomDao.rooms.get(index);
}
return null;
}
public int getRoomsIndexByNum(int roomNum) {
int i = 0;
for(Room room : Container.roomDao.rooms) {
if((room.floor * 100 + room.id) == roomNum) {
return i;
}
i++;
}
return -1;
}
public int getBookingsByName(String name) {
int sum = 0;
for(Booking booking : bookings) {
if(booking.guestName.equals(name)) {
sum++;
}
}
return sum;
}
public List<Booking> getForPrintBookings() {
List<Booking> forPrintBookings = new ArrayList<>();
for (Booking bookedAllRoom : bookings) {
for (int j = 0; j < Container.roomDao.rooms.size(); j++) {
Room foundAllRoom = Container.roomDao.rooms.get(j);
int roomId = foundAllRoom.floor * 100 + foundAllRoom.id;
if (bookedAllRoom.regDate.equals(foundAllRoom.bookingDate) && bookedAllRoom.roomId == roomId && loginedGuest.name.equals(bookedAllRoom.guestName)) {
forPrintBookings.add(bookedAllRoom);
}
}
}
return forPrintBookings;
}
}
- 이처럼 BookingService에서 선언된 메서드들은 모두 BookingDao에서 실제 동작을 하게 되고, BookingController에서 private로 선언한 지역 메서드들은 모두 삭제해준다.
반응형
'프로젝트 > [Java] 호텔 예약 관리 프로그램 제작' 카테고리의 다른 글
[Java] 호텔 예약 관리 프로그램 제작(11) (0) | 2024.04.17 |
---|---|
[Java] 호텔 예약 관리 프로그램 제작(10) (0) | 2024.04.17 |
[Java] 호텔 예약 관리 프로그램 제작(8) (0) | 2024.04.17 |
[Java] 호텔 예약 관리 프로그램 제작(7) (0) | 2024.04.17 |
[Java] 호텔 예약 관리 프로그램 제작(6) (0) | 2024.04.17 |