팀프로젝트에서 키오스크 관리 프로그램을 선택하여 진행하였고 나는 CRUD중 D (삭제) 부분 기능을 맡아서 구현하였다.
아래는 처음에 삭제 기능을 구현하지 못했을때의 코드이다.
int input = scanner.nextInt();
if (input == 1) {
List<Item> menuItems = menuContext.getMenuItems("Burgers"); // for문으로 burger 변수 출력
for (int i = 0; i <menuItems.size(); i++) {
System.out.println(i + 1 + "." + menuItems.get(i));
}
System.out.println("삭제할 메뉴의 번호를 입력하세요");
int menuNum = scanner.nextInt();
switch (menuNum) {
case 1:
System.out.println("ID를 입력해주세요.");
int IdNum = scanner.nextInt();
if (menuNum == IdNum) {
menuItems.remove(0); }
else {
System.out.println("ID를 잘못 입력하였습니다.");
}
break;
해당 코드는 키오스크 관리 프로그램에서 4번 "상품 삭제"로 입력을 주었을때 1~4번 메뉴 카테고리에 해당되는 메뉴들을 for문을 통해 출력되게 하는 것이다.
처음 '삭제' 기능 구현을 생각할 때 "그냥 기존 상품 + 상품 생성을 통해 추가된 상품 리스트를 불러와서 삭제하면 끝 아니야?" 라고 단순하게 생각을 했는데 코드 구현을 하면서 알게 된 것들이 정말 많았다.
삭제 기능을 너무 쉽게 생각한 것도 있고, 실력 문제도 있었지만 스스로 공부 + 도움을 통해 기능을 최대한 구현했다.
그럼에도 삭제 기능이 전날 끝까지 되지 않아 Slack에 팀원분들이 있는 곳에 된 부분까지 올렸고 수인님께서 원인을 알려주셨다.
대입연산자(=)를 이해를 잘못하고 있었던 것 List menuItems = menuContext.getMenuItems("Burgers"); 이렇게하면 그냥 menuContext.getMenuItems("Burgers")의 값이 menuItems에 복사가 되는 것이며 menuContext.getMenuItems("Burgers"); 자체가 되는게 아니라고 알려주셨다.
MenuContext.getMenuItems("Burgers")여기에 remove를 구현하거나burgersMenus.remove(menuNum-1)를 하는 방식으로 직접 접근해서 지워야 했었다.
private static void deleteMenuItemInput() {
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
if (input == 1) {
List<Item> menuItems = menuContext.getMenuItems("Burgers"); // for문으로 burger 목록 출력
for (int i = 0; i < menuItems.size(); i++) {
System.out.println(i + 1 + "." + menuItems.get(i));
}
System.out.println("삭제할 메뉴의 번호를 입력하세요");
int menuNum = scanner.nextInt();
System.out.println("ID를 입력해주세요.");
int IdNum = scanner.nextInt();
int a = IdNum;
if (menuNum == IdNum) {
menuContext.getMenuItems("Burgers").remove(a - 1);
displayRemoveMenu();
} else {
System.out.println("ID를 잘못 입력하였습니다.");
displayRemoveMenu();
}
for문으로 메뉴의 리스트를 출력한 다음 scanner를 통해 정수를 받는다. 그리고 ID값을 입력해서 일치하면 if문을 통해 해당 상품을 제거하게되게 구현했다. (다행히 상품 1~N번까지 ID값이 1~N으로 동일하게 생성되는 구조여서 가능했다.)
여기서 menuContext.getMenuItems("Burgers").remove(a - 1)의 경우 0부터 시작하고 삭제 하려고 넣은 입력 값은 1~N이기에 -1을 줌으로써 입력 넣은 상품을 삭제할 수 있게 하였다.
1. 기존 상품 리스트 + 추가 상품 리스트를 불러와야 하는 것
→ 해결: Main 메서드 시작 부분에 menuContext객체 덕분에 해결됐다.
이는 사실 생성과 연관이 있는데. 상품 생성 기능에서 'Burgers' Map의 Value값 List burgers에 새로운 상품이 추가되면 이후에 삭제 기능에서 List burgers를 for문으로 불러올 때 추가되어 보여졌다.
2. 메뉴 카테고리 안의 상품리스트 출력은 Map 형태로 Key-value 구조로 할 수 있었다.
여기서 추가적으로 Map<key, value> 구성에서 map<String, List
>특히 키 값이 String "Burgers"라면 나중에 value값을 불러오기 위해서는 정확히 문자열 형태의 "Burgers"를 입력해야 value값을 가져온다는 것이다.
3. 함께하는 모든 팀원들은 좋은 사람들이다.
사실 이번 팀 프로젝트도 아무것도 기여하지 못하고 끝낼까봐 너무 스스로에게 압박감이 느껴지고 무기력했었다.
스스로 해결해야 한다는 생각이 지배적이였고, 도움을 청하는 것도 내가 아는 지식이 너무 얕은 수준이라 망설였던 것 같다.
이번 기회에 느낀건 스스로가 그렇게 생각한 것이지, 도움이 필요할 때 안도와주는 사람은 아무도 없고 오히려 망설이고 선뜻 말하지 못한 나의 태도가 문제가 아니였을까 싶은 순간이였다.
지난번 팀원 소개 페이지를 만들때와 같이 이번에 팀원 나머지 세분 모두 좋은 사람들이여서 서로 알려주고 배운게 많아서 고마운 마음이 크다. 스프링 뿐만 아니라 내가 잘하는 부분이 있으면 적극적으로 도움 받은 그 이상을 해주면서 함께 성장해가야겠다 생각이 들었다.
→ 이 부분은 주말이나 시간이 남을 때 한번 구현해보려 한다.
→ 솔직하게 "나는 지금 이거 모른다. 근데 해보고 싶어서 ~~까지 최대한 해보려 한다." 또는 "이거는 힘들 것 같고 다른 파트 해보겠다" 와 같이 적극적으로 내 의사를 표현하고 도움을 요청하거나 잘할 수 있는 부분을 해내가는 태도를 가져봐야 겠다.
내가 가만히 있으면서 도움을 받길 바라는 것은 좋은 방향이 아니라는 점을 알 수 있었다.