사이먼's 코딩노트
[Java] 호텔 예약 관리 프로그램 제작(10) 본문
[호텔 예약 관리 프로그램 제작]
- 작성된 모든 코드는 저의 깃허브 리포지터리에서 확인하실 수 있습니다.
- 깃허브 리포지터리 주소 : https://github.com/psm817/hotel_booking_proj
GitHub - psm817/hotel_booking_proj
Contribute to psm817/hotel_booking_proj development by creating an account on GitHub.
github.com
[RoomService 생성]
- Container에서 각 Service 객체를 생성하였고, 이번에는 RoomService.java 클래스를 생성하려한다.
- 먼저 RoomService.java 클래스에는 RoomController에서 선언된 메서드의 중복된 사용을 최소화하기 위해서 비슷한 기능들은 하나로 모아 메서드를 선언해주고 RoomDao를 연결하여 해당 메서드를 다시 RoomDao에서 호출할 수 있도록한다.
package org.example.service;
import org.example.Container;
import org.example.dao.RoomDao;
import org.example.dto.Room;
public class RoomService {
private RoomDao roomDao;
public RoomService() {
roomDao = Container.roomDao;
}
public void add(Room room) {
roomDao.add(room);
}
}
- add() 메서드는 makeTestData() 메서드를 위해서 추가되었고, 객실 추가 역할을 한다.
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<>();
}
public void add(Room room) {
rooms.add(room);
lastId++;
}
}
- 이처럼 RoomService에서 선언된 메서드는 모두 RoomDao에서 실제 동작을 하게 되고, RoomController에서 private로 선언한 지역 메서드들은 모두 삭제해준다.
[GuestService 생성]
- 마지막으로 GuestService.java 클래스를 생성하려한다.
- 먼저 GuestService.java 클래스에는 GuestController에서 선언된 메서드의 중복된 사용을 최소화하기 위해서 비슷한 기능들은 하나로 모아 메서드를 선언해주고 GuestDao를 연결하여 해당 메서드를 다시 GuestDao에서 호출할 수 있도록한다.
package org.example.service;
import org.example.container.Container;
import org.example.dao.GuestDao;
import org.example.dto.Guest;
public class GuestService {
private GuestDao guestDao;
public GuestService() {
guestDao = Container.guestDao;
}
public void add(Guest guest) {
guestDao.add(guest);
}
public Guest getGuestByLoginId(String loginId) {
return guestDao.getGuestByLoginId(loginId);
}
public int getGuestIndexByLoginId(String loginId) {
return guestDao.getGuestIndexByLoginId(loginId);
}
}
- add() 메서드는 makeTestGuest() 메서드를 위해서 추가되었고, 회원 추가 역할을 한다.
- getGuestByLoginId() 메서드는 로그인ID를 매개변수로 받아 ID를 이용하여 현재 로그인된 회원의 정보를 가져오는 역할을 한다.
- getGuestIndexByLoginId() 메서드는 로그인ID를 매개변수로 받아 ID를 이용하여 guests List에서 현재 로그인된 회원의 인덱스 번호를 가져오는 역할을 한다.
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<>();
}
public void add(Guest guest) {
guests.add(guest);
lastId++;
}
public Guest getGuestByLoginId(String loginId) {
int index = getGuestIndexByLoginId(loginId);
if(index == -1) {
return null;
}
return guests.get(index);
}
public int getGuestIndexByLoginId(String loginId) {
int i = 0;
for(Guest guest : guests) {
if(guest.loginId.equals(loginId)) {
return i;
}
i++;
}
return -1;
}
}
- 이처럼 GuestService에서 선언된 메서드들은 모두 GuestDao에서 실제 동작을 하게 되고, GuestController에서 private로 선언한 지역 메서드들은 모두 삭제해준다.
[Session 생성]
- 마지막 패키징 분리 작업으로 Controller.java에서 관리하던 현재 로그인된 회원을 가르키는 loginedGuest 공공재 변수와 로그인이 되어있는지 판단하는 isLogined() 메서드를 Session이라는 클래스를 통해 전문적으로 수행하도록 하려한다.
- 먼저 Session 객체를 생성하기 위해서는 역시나 Container에서 해당 객체 변수를 먼저 선언해줘야 한다.
package org.example.container;
import org.example.controller.Session;
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 Session session;
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();
}
public static Session getSession() {
if(session == null) {
session = new Session();
}
return session;
}
}
- session은 다른 service와 dao와는 생성자를 통해 바로 객체를 생성하지 않고, 조건문을 이용해서 먼저 판단한다.
- session 객체 변수를 선언하고 static 메서드인 getSession()을 생성하여 만약 session이 null이라면 새로운 객체를 생성하도록 하고 그렇제 않으면 기존에 있던 회원 정보인 session을 return하도록 한다.
- 그 다음 Session.java 클래스를 생성하여 로그인에 관한 기능들을 Controller에서 모두 이전해준다.
package org.example.controller;
import org.example.dto.Guest;
// 현재 사용자가 이용중인 정보
// 해당 정보는 사용자가 프로그램을 사용할 때 동안 계속 유지됨.
public class Session {
public Guest loginedGuest;
public Guest getLoginedGuest() {
return loginedGuest;
}
public void setLoginedGuest(Guest loginedGuest) {
this.loginedGuest = loginedGuest;
}
public boolean isLogined() {
return loginedGuest != null;
}
}
- getLoginedGuest() 메서드는 로그인된 회원이 있다면 loginedGuest를 그대로 return 해준다.
- setLoginedGuest() 메서드는 로그인이 완료된 순간 loginedGuest 값을 매개변수로 받아 전역변수인 loginedGuest에 해당 회원의 정보를 저장한다.
- isLogined()는 로그인 여부를 따지는 메서드이므로 로그인이 되어있다면 true를 return 해준다.
반응형
'프로젝트 > [Java] 호텔 예약 관리 프로그램 제작' 카테고리의 다른 글
[Java] 호텔 예약 관리 프로그램 제작(12) (0) | 2024.04.17 |
---|---|
[Java] 호텔 예약 관리 프로그램 제작(11) (0) | 2024.04.17 |
[Java] 호텔 예약 관리 프로그램 제작(9) (0) | 2024.04.17 |
[Java] 호텔 예약 관리 프로그램 제작(8) (0) | 2024.04.17 |
[Java] 호텔 예약 관리 프로그램 제작(7) (0) | 2024.04.17 |