지난시간에 이어 키오스크프로그램의 상품 추가 기능을 구현하였다.
오늘 작성한 코드를 리뷰해보자.
처음시작은 List로 짜여진 각 메뉴의카테고리와 메뉴리스트를 그대로 사용할려고 하였지만 상품의 추가, 삭제 기능에는 만약 기존 메뉴가 없는 상품의 경우 메뉴또한 추가하여야 했기때문에 이에 따라서 해당 메뉴의 카테고리 또한 생성될 필요성이 있었다. 하지만 런타임도중에 새로운 List의 생성은 어려우며 각 상품과 메뉴리스트에 고유한 ID를 부여해야 했기때문에 과감히 자료구조를 변경하였다. 고유한 ID를 일일히 변수요소로 추가하는것 보다 Map자료구조의 key와 value 형태를 활용하기로 하였고 이에 따라 key는 ID, value는 menu 와 product의 인스턴스로 정의하였다. 또한 메뉴의 ID는 순서에따라 1,2,3... 부여하였고 상품은 메뉴에 따라 구분을 하여야했기때문에 "#"을 기준으로 앞이 해당 상품의 메뉴, 뒤를 상품고유의ID로 정의하였다.
자료구조가 확정되었으니 이에 따른 상품의 추가로직을 구현하기로 하였다. 우선 객체의 입력변수로 상품의 메뉴,이름,설명,가격을 받아 입력한 메뉴의 값과 menuList의 value값들을 비교하여 같은 메뉴가 존재하면 그 메뉴의 key값을 받아와 "#" 이전의 key값이 같은 상품들을 추려내어 같은 메뉴의 상품들을 keys리스트로 묶은후 가장 큰 값의 1을 더하여 새로운 ID를 생성후 상품의 추가하였다. 또한 기존의 존재하지않는 메뉴의 상품이면 메뉴리스트에 새로운 메뉴로 추가한 후 상품을 추가하였다.
List의 자료구조는 익숙하여 자주 사용하였지만 key와 value의 자료구조인 map은 사용이 어려웠지만 상대적으로 상품의 데이터 등 ID가 존재하는 데이터리스트들의 자료구조로 적합함을 배웠다.또한 비록 이번엔 for문과 if문을 사용하여 구현하였지만 iterator와 stream을 사용해서 구현하는것이 더 성능적으로 좋지 않았을까 라는 생각이 들었다.