자바) 예외처리와 if문에서 조건으로 걸러내기

조회수 2000회

별거는 아닌데 코드를 짜다가 List<>의 특정인덱스의 아이템을 삭제해야할 일이 생겻습니다..

해당코드입니다.

public boolean removeDetails(int index) 
{
        if(routineDetailModels == null || index >= routineDetailModels.size() || index < 0)
            return false;
        this.routineDetailModels.remove(index);
        return true;
    }

routineDetailModelsList<> 입니다.

보시다시피 이 리스트의 인덱스 위치에 있는 아이템을 삭제해주기전에 안전하게 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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)