사이먼's 코딩노트

[Java] 호텔 예약 관리 프로그램 제작(10) 본문

프로젝트/[Java] 호텔 예약 관리 프로그램 제작

[Java] 호텔 예약 관리 프로그램 제작(10)

simonpark817 2024. 4. 17. 16:48

[호텔 예약 관리 프로그램 제작]

 

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 해준다.
반응형