for을 사용해 삭제기능을 구현하던 도중 발생한 상황으로 간단한 문제 였던 것 같지만 for문에대해 다시 알게 해주는 문제 였던 것 같다.
문제상황은 다음과 같다.
코드 설명은 간단하게 리스트에 들어있는 값을 매개변수로 받은 값으로 비교해서 매개변수 값과 리스트의 값이 같을때 같은정보만은 삭제 하는 상황이다.
문제는 리스트에 데이터가 하나면 삭제처리가 잘되었지만 리스트의 데이터가 늘어나면 첫번째로 들어가져있는 데이터만 삭제되는 것이다.
이유는 지우길 원하는 데이터는 2번이데 리스트에는 1, 2번 순으로 데이터가 저장되어 았어서 위의 코드를 따르면 2번과 1번 데이터를 비교를 먼저 하는데 그 데이터가 맞지 않아서 정작 삭제할 데이터까지 가지 모하고 for문을 다른 함수로 인해 빠져 나오게 된다.
처음으로 선택한 해결방법으로 else if 문을 추가해서 조건을 더 준후 위와 같은 문제를 해결하려 했다.
원하는 데이터보다 조회하려는 데이터가 작으면 될것 같아 else if로 추가 했고 다음과 같았다.
기능을 실행해보니 해결된것 같아 보였지만 리스트에 없는 번호를 입력하거나 하면 또 다시 문제가 발생했다.
문제의 답은 if에 있지 않았고 for에 답이 있었다.
간단하게 말하자면 for문에서 조건에 맞는 데이터를 삭제만! 하면 되는 것이였다.
바로 코드를보며 이해하자.
코드에서 보는것과 같이 삭제에만 신경을 쓰면 되는것이였다.
굳이 다른 경우를 생각해주지 않아도 if는 조건에 맞을때만 동작 하기 때문에 위와같은 경우에선 for문은 계소 돌고 if는 자기 할일 하나만 하면 되느것이였다.
물론 발생하는 조건을 if로 모두 작성해줘도 되겠지만 조건이 까다로울땐 조건을 만드는 시간과 노력이 많이 들것같다.
이렇듯 안에서만 문제를 찾지말고 밖에서도 문제를 다시한번 봐야겠다고 생각하게되는 문제였다.