231024~231030C 1030W
객실 하나하나의 정보를 담는 Room과 이를 모아둔 Map, roomList, 그리고 러브룸.
우선 객실 목록 조회를 위한 RoomDatabase(향후 Hotel로 바뀜)클래스를 생성
우선 각 객실별로 호실 번호, 타입, 가격, 그리고 현재 예약 현황을 알 수 있어야 한다.
제일 먼저 떠오른 건 List<>를 사용하는 거였는데, 이번 기회에 많이 안 다뤄본 Map을, 그 컬렉션 중에서도 대표적이라고 하는 HashMap을 활용해보기로 하고 작성하기 시작했다.
private final Map<Integer, Room> roomList = new HashMap<Integer, Room>
private Hotel() {
roomList.put(1, new Room(101, RoomType.MEDIUM, 5400000L, false));
roomList.put(2, new Room(102, RoomType.MEDIUM, 5450000L, false));
roomList.put(3, new Room(103, RoomType.MEDIUM, 4800000L, false));
roomList.put(4, new Room(201, RoomType.MEDIUM, 9990000L, false));
roomList.put(5, new Room(202, RoomType.DELUXE, 5980000L, false));
roomList.put(6, new Room(203, RoomType.DELUXE, 9795000L, false));
roomList.put(7, new Room(301, RoomType.SWEET, 16700000L, false));
roomList.put(8, new Room(302, RoomType.SWEET, 17000000L, false));
roomList.put(9, new Room(303, RoomType.SPECIAL, 37000000L, false));
roomList.put(10, new Room(401, RoomType.SPECIAL, 20000000L, false));
roomList.put(11, new Room(402, RoomType.LOVE, 30000000L, false));
roomList.put(12, new Room(403, RoomType.LOVE, 24000000L, false));
}
Key값으로는 단순하게 번호로 받도록 Integer를 넣고, Value란엔 해당 번호에 배정될 Room을 넣어주고 roomList라 변수명을 지어줬다.
그냥 Room이 아니라 여러 매개변수를 품은 객체Room을 Value자체에 생성해주었는데, 이를 위해 Room 클래스를 따로 만들어주고 그 안에 객실 구성요소를 필드에 넣어 주었고, 현 클래스에 import시켜주었다.
Room은 클래스는 다음과 같다.
package domain;
public class Room {
private int number;
private RoomType roomType;
private long cost;
private boolean reserved;
public Room(int number, RoomType roomType, long cost, boolean reserved) {
this.number = number;
this.roomType = roomType;
this.cost = cost;
this.reserved = reserved;
}
public int getNumber() {
return number;
}
public RoomType getRoomType() {
return roomType;
}
public long getCost() {
return cost;
}
public boolean isReserved() {
return reserved;
}
public void setReserved(boolean reserved) {
this.reserved = reserved;
}
}
이 중 RoomType은 String이 아닌 참조변수로 쓰였는데, 이는 RoomType또한 클래스로 세분화 시켰기 때문이다.
package domain;
public enum RoomType {
MEDIUM("스텐다드"),
DELUXE("디럭스"),
SWEET("스위트"),
SPECIAL("스페셜"),
LOVE("러브");
private final String type;
RoomType(String type) {
this.type = type;
}
public String getType() {
return type;
}
}
RoomType클래스. enum상수를 사용해 각 객실의 타입을 선언했다.
이렇게 되면 Room생성자가 알맞는 해당 매개인자들을 받고, Map은 value값으로 그 Room을 받는다.
그럼 잠시 아까 작성한 Map에 대해 정리를 해보자면,
roomList.put(1, new Room());
원래 이렇게 생긴 껍데기에 각 값을 채워넣어 주면,
roomList.put(1, new Room(101, RoomType.MEDIUM, 5400000L, false));
“101호, MEDIUM타입(”스탠다드”), 540만원, 예약가능” 이라는 정보를 가진 Room객체가 생성됨과 동시에 roomList라는 HashMap의 Key 1에 해당하는 Value값이 되는 것이다.
추가로 위의 줄 마지막에 false값은 현재 방 상태가 예약이 가능한지 아닌지를 나타내기 위한 것으로, false면 예약가능, true면 예약완료 라고 표기되게 된다. (물론 해당 기능의 완성을 위해선 추가적으로 예약여부를 판단하는 메서드가 있어야 하고 이는 다른 팀원분이 맡아서 작업했다.)
간단히 설명하자면, 객실이 장바구니에 담길 때 Room필드의 reserved변수에 true값이 담기는 메서드가 작성되어 있는데, 결제까지 진행되면 true값이 그대로 유지, 장바구니에서 객실이 지워질 땐 다시 false로 돌아가도록 작성이 되어있다. 결제까지 쭉 진행이 된다면 그 true값이 이후 객실 목록 조회시 “예약완료=true”로 표기되는 것이다.
얼마 하지도 않았는데 벌써부터 머리가 쪼개지고있다. 각성ㅈ… 아니, 커피… 커피가 필요하다.
'코딩 > JAVA' 카테고리의 다른 글
TPJ-호텔 예약 프로그램 (4) (1) | 2023.11.01 |
---|---|
TPJ-호텔 예약 프로그램 (3) (1) | 2023.11.01 |
TPJ-호텔 예약 프로그램 (1) (0) | 2023.11.01 |
오케~ 또시피~ (1) | 2023.10.16 |
충격과 공포와 반전의 과제용 COOKING RECIPE (1) | 2023.10.14 |