상품추가가 끝났으니 다음은 상품삭제기능 구현...
필수 요구사항인 상품의 ID를 통한 상품의 삭제를 구현하였다.
public void deleteProduct(String id) {
productList.remove(id);
String idKey = id.substring(0, id.indexOf("#")); //삭제 상품의 메뉴ID
Boolean exist = false;
for (String K : productList.keySet()) {
String matchKey = K.substring(0, K.indexOf("#"));
if (Objects.equals(idKey, matchKey)) { //삭제후 남은 상품들중에 삭제한 상품의 메뉴와 일치하는 메뉴를 가지고있는 상품이 있는지 조회
exist = true;
break;
}
}
if (!exist) { // 삭제상품과 전 상품의 메뉴ID가 같은게없으면 메뉴리스트삭제
menuList.remove(idKey);
}
}
ID를 입력받아 해당 상품을 리스트에서 삭제 후 삭제한 상품의 메뉴가 다른 상품을 가지지않으면 삭제하는 로직을 구현하였다.
상품의 추가와 삭제 과정에서 상품의 ID를 구별해야하는 경우가 발생하였는데 이때 사용한 메서드에 대해 알아보자.
substring은 2가지 사용법이 있다.
id.substring(startIndex); //시작인덱스 ~ 문자열의마지막
id.substring(startIndex, endIndex); // 시작인덱스 ~ 끝인덱스
인덱스를 활용하여 문자열을 원하는 인덱스의 문자열만 출력이 가능하다.
하지만 이번 상품의 ID처럼 길이를 알수없는 경우는 어떻게 해야하는가?
이때 사용한것이 indexOf와 lastIndexOf 이다.
indexOf는 찾는 문자의 인덱스를 반환하는 메서드로 찾지못하면 -1를 반환한다.
id.indexOf("#") /// "#"의 문자가 나오는 인덱스 넘버를 반환
id.indexOf("#",3) /// 인덱스 3부터 "#"의 문자 탐색하여 인덱스 넘버를 반환
lastIndexOf는 indexOf와 비슷한 기능을 하지만 다른점은 탐색위치가 문자열 처음이 아닌 "맨 마지막" 이라는것이다.
id.lastIndexOf("#") /// 맨뒤에서부터 탐색하여 "#"의 문자가 나오는 인덱스 넘버를 반환
다만 lastIndexOf의 경우 반환하는 인덱스의 넘버는 맨뒤기준이 아닌 맨앞 즉 '0'부터 시작하는 인덱스숫자를 반환한다는 점이 주의해야할 점이다.
상품의 ID같은 문자열은 숫자나 문자만이 아닌 특수문자까지 포함된 하나의 문자열인 경우가 높다 그러므로 문자열 자르기를 통해 원하는 부분의 문자열만 필터링하여 데이터를 조회하거나 출력하는데 도움이 많이되는 메서드라고 생각한다.