231024~231030C 1031W
하나가 되자 코드들아.
이전 글에서 출력문들은 output클래스로 모아놨다고 했었다.
나같은 경우 객실상태를 확인하는 작업이다보니 RoomCheckOutput으로 명명했다.
출력될 내용들을 System.out.println(); 와 함께 메서드에 넣었고, 이를 HotelLounge에서 순서에 맞게 호출해가게 된다.
public void printConfirmedCheckedRoomView() {
System.out.println("선택하신 객실이 장바구니로 이동되었습니다.");
System.out.println("'객실예약대기목록'에서 결제해주세요. :)");
}
위와 같이 대부분 단순 출력만하는 경우였는데, 게중에 하나는 조금 달랐다.
public void printSelectRoomView(Customer customer, Map<Integer, Room> roomList) {
System.out.printf("[ 뇌정지 호텔 - %s님 ]\\n", customer.getName());
System.out.println("예약하실 객실을 선택해 주세요.");
Iterator<Integer> iter = roomList.keySet().iterator();
while (iter.hasNext()) {
Integer key = iter.next();
int roomNum = roomList.get(key).getNumber();
String roomType = roomList.get(key).getRoomType().getType();
long roomCost = roomList.get(key).getCost();
String roomStatus;
if (roomList.get(key).isReserved()) {
roomStatus = "예약완료";
} else {
roomStatus = "예약가능";
}
System.out.println(
key + ". " + roomNum + "호 | " + roomType + " | W " + roomCost + " | " + roomStatus);
}
System.out.println("0. 취소");
}
영롱하다.
또 한 번 뜯어보자.
우선 제일 위의 printf문. println만 보편적으로 알고 사용해오다가 이전 참고영상으로 공부할 때 몇 번 봤는데 그래도 이해가 잘 안가서 구글링 해봤었던 게 기억난다. 이번에도 마찬가지였지만.
우선 “형식화된 출력”, 이라고 소개되는 출력문이다.
주로 사용되는 println()은 변수 값을 그대로 출력하기 때문에, 들어가는 값 자체를 변환하지 않고는 다른 형식으로의 출력이 불가능하다고 한다.
반면 printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다고 하는데, 개인적으로 아예 문장을 통으로 출력을 할 때는 println(), 그리고 만들어진 문장 내에서 여러 값들을 변경하고 싶을 땐 printf()을 사용하는게 용이하다는 느낌을 받았다.(그리고 왠지 모르게 매력적이다.)
하지만 처음 봤을 때는 ‘이게 당최 뭔…?’ 하는 진입장벽을 좀 느낄 수도 있다.
위의 내 작성문을 예로 들어보자.
System.out.printf("[ 뇌정지 호텔 - %s님 ]\\n", customer.getName());
우선 printf()문을 사용할 때는 위의 %s를 포함해 %d, %n등의 ‘지시자’를 활용해 완성한다.
기본적으로 큰 따옴표”” 이내에 지시자들을 사용하고 반점(,)을 찍고나서부턴 각 지시자들에 차례대로 들어갈 요소들을 하나하나 (,)을 찍어가며 적어주면 된다. (\n은 줄바꿈)
위의 경우, %s는 ‘문자열’을 대입하는 지시자 인데, 반점(,) 이후 ‘customer.getName()’이 저 %s에 들어가게 되는 거다.
‘customer.getName()’자체로서는 나중에 로그인 하게 될 고객정보를 가져오기 때문에, 만약 로그인한 사람 이름이 “하나”이면 %s자리로 들어가 "[ 뇌정지 호텔 - 하나님 ]” 이 완성되는 거다.
이걸 println으로 쓰게 된다면 이렇게 된다.
System.out.printf("[ 뇌정지 호텔 - " + customer.getName() + "님 ]\\n");
지금 봐서야 별 차이 안 나보이긴 하지만, 저 안에 바뀌어 대입하게 될 요소들이 군데군데 많아진다 싶으면… 별로 생각 안하고 싶다.
상황에 따라 맞게 사용하면 되겠다.
그 다음이 조금 관건인데, Iterator 는 정말 거의 안다뤄봐서 거의 검색정보에 코를 박고 작성했다.
자세한 내용에 관한 건 따로 다루고 요점과 순서만 과감히 발라 내보자면,
Map으로 만들었던 roomList의 Value값들을 나열하기위해 Iterator방법을 사용했다.
호 수, 객실 타입, 가격, 예약현황 값들을 하나하나 대입해줘 출력문을 완성시켜야 하기 때문에, 각 요소에 맞게 지역변수에 대입했다.
예약현황의 경우 ‘true’ 혹은 ‘false’ 로 반환해주는 메서드에서 가져온 값을 if문을 돌려 이를 “예약완료” 와 “예약가능” 중 하나로 선택되고, 비로소 아래의 println에서 조립되어 완성된다.
결국에 출력하고 싶었던 문장은 바로 ex) “12. 403호 | 러브 | W 24000000 | 예약가능” 이다.
…
어서 빨리 그냥 말만해도 바로 알아듣는 컴퓨터가 나왔으면 좋겠다. 어, 그럼 내 일자ㄹ…
방금 말은 취소한다.
작업을 마치고 나면 내가 작업했던 브랜치를 Github에 Push하고 Pull Request를 올려 수정할 사항이나, 더 좋은 제안 등의 다른 팀원들의 리뷰를 받는다. 완벽하면 그대로 Approve를 받아 그대로 Merge시키던지, 다시 수정을 하고 다시 PR을 올리고 리뷰받고의 반복이다.
첫 PR이다 보니 수정사항도 달콤하다.
이런식으로 몇 번의 PR, 몇 번의 수정을 거치고 난 후, 완벽하다! 싶으면 모든 팀원들의 작업물들을 한데 모아 develop 브랜치로 merge시키고 마참내 main으로 또머지 시켜준다.
이렇게 우리 팀의 아름다운 프로젝트가 완성됬다.
'코딩 > JAVA' 카테고리의 다른 글
NoErrorMessege (1) | 2023.11.06 |
---|---|
TPJ-호텔 예약 프로그램 (5) (1) | 2023.11.02 |
TPJ-호텔 예약 프로그램 (3) (1) | 2023.11.01 |
TPJ-호텔 예약 프로그램 (2) (1) | 2023.11.01 |
TPJ-호텔 예약 프로그램 (1) (0) | 2023.11.01 |