프로젝트/[Java] 호텔 예약 관리 프로그램 제작
[Java] 호텔 예약 관리 프로그램 제작(8)
simonpark817
2024. 4. 17. 15:25
[호텔 예약 관리 프로그램 제작]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 깃허브 리포지터리 주소 : https://github.com/psm817/hotel_booking_proj
2개 이상 예약했을 때 원하는 예약 삭제 가능 구현 · psm817/hotel_booking_proj@98268d2
psm817 committed Apr 8, 2024
github.com
[Container 생성]
- 이번에는 프로그램의 코드 관리를 보다 효율적으로 하기 위해 몇 가지 클래스와 패키지를 추가하여 패키징 분리를 시도하려 한다.
- 현재 프로그램은 각 컨트롤러에서 List를 생성하고 관리하고 있다.
- 해당 List를 dao라는 패키지 안에 각 Dao 클래스를 생성하여 List 생성과 기능에 관한 코드들을 모두 이전하려 한다.
- 각 Dao를 생성하기 전, 각 Controller에서 List에 관련된 기능을 수행할 때 반드시 거쳐가야 하는 바다와 같은 Container라는 클래스를 생성한다.
package org.example;
import org.example.dao.BookingDao;
import org.example.dao.GuestDao;
import org.example.dao.RoomDao;
public class Container {
public static BookingDao bookingDao;
public static RoomDao roomDao;
public static GuestDao guestDao;
static {
bookingDao = new BookingDao();
roomDao = new RoomDao();
guestDao = new GuestDao();
}
}
- Container에 각 Dao에 대한 객체 변수를 static으로 선언하고 생성자를 통해 객체를 생성하도록 해준다.
- 이렇게 되면 예를 들어 BookingController에서 Container.bookingDao.'메서드()' 를 호출하게 되면 자연스럽게 Container를 통해 BookingDao 객체를 생성하고 BookingDao에서 구현된 메서드를 실행할 수 있다.
- 초기 작업이 복잡해 보이지만, 코드가 길어지고 기능이 많아질 수록 활용도는 더 높아진다.
[Dao 생성]
- 각각의 Dao를 생성하기 전에 예약, 객실, 회원은 모두 고유 번호인 id를 가지고 있다.
- 현재 프로그램은 각각의 리스트 배열의 size() + 1을 통해 데이터들이 추가될 때마다 id 값을 1씩 증가시킨다.
- 이제는 해당 기능을 각 컨트롤러가 아닌 Dao에서 전반적으로 관리하려 한다.
package org.example.dao;
public class Dao {
protected int lastId;
public Dao() {
lastId = 0;
}
public int getNewId() {
return lastId + 1;
}
public int getLastId() {
return lastId;
}
}
- lastId라는 변수를 protected로 선언하고, 생성자를 통해 초기 값을 0으로 설정한다.
- protected 접근제한자를 사용하는 이유는 같은 Dao 패키지 또는 자식 클래스에서만 사용 가능하도록 하기 위해서다.
- 만약 리스트가 추가됐다면 getNewId() 라는 메서드를 호출하여 id 값을 1씩 증가시키도록 한다.
[Booking Dao 생성]
- Container를 생성했다면 이제 각각의 Dao를 생성해야 한다.
- 먼저 BookingDao.java 클래스에는 Bookings List 생성과 관련된 코드를 작성하고, 기존의 BookingController.java 에서 선언된 List<Booking> bookings = new ArrayList<>() 는 삭제한다.
- Bookings의 정보에는 고유 번호인 id가 필수적으로 존재하고 BookingController에서 예약 건이 하나씩 생성될 때마다 id 값을 가져오기 위해서 Dao.java를 반드시 상속받아야 한다.
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;
public class BookingDao extends Dao {
public List<Booking> bookings;
public BookingDao() {
bookings = new ArrayList<>();
}
}
- Container를 통해 BookingDao 객체를 생성하게 되면 호출과 동시에 bookings 라는 리스트 배열이 생성되고 생성자를 통해 자동으로 ArrayList와 연결된다.
- 앞으로 bookings List와 관련된 기능들은 모두 이 곳에 코드를 작성할 예정이다.
[Room Dao 생성]
- 그 다음으로 RoomDao.java 클래스에는 Rooms List 생성과 관련된 코드를 작성하고, 기존의 RoomController.java 에서 선언된 List<Room> rooms = new ArrayList<>() 는 삭제한다.
- Rooms의 정보에는 고유 번호인 id가 필수적으로 존재하고 RoomController에서 1일치의 객실이 새로 생성될 때마다 id 값을 가져오기 위해서 Dao.java를 반드시 상속받아야 한다.
package org.example.dao;
import org.example.dto.Room;
import java.util.ArrayList;
import java.util.List;
public class RoomDao extends Dao {
public List<Room> rooms;
public RoomDao() {
rooms = new ArrayList<>();
}
}
- Container를 통해 RoomDao 객체를 생성하게 되면 호출과 동시에 rooms 라는 리스트 배열이 생성되고 생성자를 통해 자동으로 ArrayList와 연결된다.
- 앞으로 rooms List와 관련된 기능들은 모두 이 곳에 코드를 작성할 예정이다.
[Guest Dao 생성]
- 마지막으로 GusetDao.java 클래스에는 Guests List 생성과 관련된 코드를 작성하고, 기존의 GuestController.java 에서 선언된 List<Guest> guests = new ArrayList<>() 는 삭제한다.
- Guests의 정보에는 고유 번호인 id가 필수적으로 존재하고 GuestController에서 회원이 하나씩 생성될 때마다 id 값을 가져오기 위해서 Dao.java를 반드시 상속받아야 한다.
package org.example.dao;
import org.example.dto.Guest;
import java.util.ArrayList;
import java.util.List;
public class GuestDao extends Dao {
public List<Guest> guests;
public GuestDao() {
guests = new ArrayList<>();
}
}
- Container를 통해 GuestDao 객체를 생성하게 되면 호출과 동시에 guests 라는 리스트 배열이 생성되고 생성자를 통해 자동으로 ArrayList와 연결된다.
- 앞으로 guests List와 관련된 기능들은 모두 이 곳에 코드를 작성할 예정이다.
반응형