자바) 예외처리와 if문에서 조건으로 걸러내기
조회수 2000회
별거는 아닌데 코드를 짜다가 List<>의 특정인덱스의 아이템을 삭제해야할 일이 생겻습니다..
해당코드입니다.
public boolean removeDetails(int index)
{
if(routineDetailModels == null || index >= routineDetailModels.size() || index < 0)
return false;
this.routineDetailModels.remove(index);
return true;
}
routineDetailModels
는 List<>
입니다.
보시다시피 이 리스트의 인덱스 위치에 있는 아이템을 삭제해주기전에 안전하게 null을 검사하고 없는 인덱스를 삭제하는것은 아닌지 검사를 해주는데요..
이렇게하는거랑 그냥
this.routineDetailModels.remove(index);
이 코드만 남기고 throws로 예외 넘겨서 호출해준곳에서 예외처리로 그냥 메시지 하나 띄워주는거랑 어떤 방법이 더 낫나요? (안드로이드라 예외처리할때 예외발생시 토스트 메시지를 띄워줄생각입니다)
참고로 지금 해당메소드는 boolean을 리턴해주는데 사실 호출하는곳에서 리턴값으로 저걸 받아도 쓸일이없어서 void로 바꾸려고하거든요..
void로 바꾸려고하니 저 if문의 조건을 null이 아니고 index가 size보다 작고 index가 0보다 크고로 바꿔도
만약에 else일 상황이 나올시에 거기에 해당하는 코드를 작성하기 애매해서..
어떻게 해야 더 좋을지 궁금해서 여쭤봅니다.
1 답변
-
전반적인 코드 흐름에서, 해당 메소드의 성격에 따라 선택 될 문제 인것으로 보이는데요.
만약
routineDetailModels
이 null 인 상태에서 해당 메소드가 호출 될 명백한 시나리오가 존재한다면try-catch
는 이러한 일반적인 제어 흐름용으로 사용 되는 것은 적합하지 않습니다.대표적인 try-catch 의 잘못 된 사용 법이 하기와 같습니다
try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { }
루프를 종료 시키기 위해 try-catch 가 사용 된 예제 인데요. 이 경우에도 일반적인 제어흐름용으로 사용 되었기 때문에 잘못 된 예라고 볼 수 있습니다.
그러므로 코드의 안정성 측면에서 null , index 체크를 위한 경우라면
try-catch
구문사용 측면에서 봤을 때 좀더 사용 타당성에 가까운 경우라고 생각 됩니다.이펙티브 자바의 예외 섹션을 참고해보시는 것도 도움이 되실 것 같네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 감사합니다. 선생님 한가지만 더 여쭙겠ㅅㅂ이다 codeslave 2021.2.11 15:19
- 넵 :) 알 수 없는 사용자 2021.2.11 15:23
- 앱을 만드는중인데 만약에 이 routineDetailModels가 null체크나 예외처리를 따로지않아도 흐름상, null이 아니라면 예외처리 또는 조건처리를 따로 하지않아도 되나요? 아니면 코드라는건 무수한 경우를 배제할수 없기때문에 안정성측면에서는 해줘야하나요? codeslave 2021.2.11 15:23
- 죄송합니다 에러때문에 도배가됐네요 codeslave 2021.2.11 15:27
- 방어 코드 측면에서 저러한 기본 조건 체크를 넣어주는 것은 좋은 습관이라고 생각합니다. 알 수 없는 사용자 2021.2.11 15:31
- 감사합니다..마지막으로 답변에대해서 여쭙자면 제 코드에서 null,index 체크를위해 try catch구문을 사용하는 것은 if문사용보다 타당하다는 말씀이시져? codeslave 2021.2.11 15:44
- 이 맥락에서는 try-catch vs if 중 어떤 것이 더 타당한가? 보다는 이 메소드에서는 try-catch 구문 사용을 사용 하고 싶은데 적절한가? 에 대해 초점을 맞춰야 할 것 같습니다 :) 그리고 말씀하신 목적이라면 try-catch 를 사용 하는 것도 괜찮다고 말씀 드리고 싶네요 알 수 없는 사용자 2021.2.11 15:48
- 아하..그렇군요..그런데 이 코드로인해서 평소 생각을 않았던건데..앞으로 if 문으로 조건처리하기 try catch로 처리하기 뭐가 더 작절한지 판단해야할것같은 상황이 자주 올것같은데 뭔가 쉬워보이지는 않을것같네요ㅜ감사합니다 즐거운 명절보내세요! codeslave 2021.2.11 15:52
-
댓글 입력