본문 바로가기
Project/소경관

[소경관] : try / catch문에서 if문 다루기

by 오주현 2022. 6. 11.
반응형
try {
            JSONObject obj = (JSONObject) message.send(params);
            log.debug("### obj : {}", obj);
            System.out.println(obj.toString());

            JSONObject jsonObject = (JSONObject) obj;

            log.debug("### jsonObject : {}", (JSONObject) obj);
            log.debug("### jsonObejct - success_count : {}" , (Long) jsonObject.get("success_count"));

            // TODO: 2022-06-11 alert로 전송 성공 및 실패 결과 띄워주기
            // {"group_id":"dkdlelrkqt","success_count":1,"error_count":0}
            // 리턴 값 중 'success_count'의 값이 1로 오면 전송이 성공인 것을 if문으로 msg에 담아준다.
            if ((Long) jsonObject.get("success_count") == 1) {
                mav.addObject("msg", "전송 성공");
            } else if ((Long) jsonObject.get("success_count") == null) {
                mav.addObject("msg", "전송 실패 - null");
            }else {
                mav.addObject("msg", "전송 실패");
            }

        } catch (CoolsmsException e) {
            System.out.println(e.getMessage());
            System.out.println(e.getCode());
        } finally {

        }
        mav.addObject("url", "/management/management");
//        mav.setViewName("management/management");
        mav.setViewName("/redirect");
// TODO: 2022-06-11 try에서 담긴 model 값을 가져와야 함
        log.debug("### mav : {}", mav);
        log.debug("### mav.msg : {}", mav.getModel());

        return mav;
    }

프로젝트에서 위와 같은 코드를 사용했다. 여기서 문제가 try에서 if로 받은 값을 Veiw에서 사용하려고 했는데 try/catch에서 넣은 msg 값은 try / catch가 끝나고 나서 return할 때 값을 가져오지 못 했다. 그래서 try에서 각 if마다 리턴 값을 넣어주자 해서 아래와 같은 코드를 만들었다.

 

if ((Long) jsonObject.get("success_count") == 1) {
    mav.addObject("msg", "전송 성공");
    mav.addObject("url", "/management/management");
    mav.setViewName("/redirect");
    return mav;
} else if ((Long) jsonObject.get("success_count") == null) {
    mav.addObject("msg", "전송 실패 - null");
    mav.addObject("url", "/management/management");
    mav.setViewName("/redirect");
    return mav;
}else {
    mav.addObject("msg", "전송 실패");
    mav.addObject("url", "/management/management");
    mav.setViewName("/redirect");
    return mav;
}

이렇게 각 if마다 return을 넣어줬는데 뭔가 반복되는 느낌이 이건 별로인 코드라고 말 해주는 것 같았다. 커뮤니티에서 질문을 했는데 댓글에서 참고 사항을 알려주어 적용해서 결과적으로 코드를 아래와 같이 바꿔주었다.

 

boolean isEnd = false;

if ((Long) jsonObject.get("success_count") == 1) {
    mav.addObject("msg", "전송 성공");
    mav.addObject("url", "/management/management");
    isEnd = true;
} else if ((Long) jsonObject.get("success_count") == null) {
    mav.addObject("msg", "전송 실패 - null");
    mav.addObject("url", "/management/management");
    isEnd = true;
}else {
    mav.addObject("msg", "전송 실패");
    mav.addObject("url", "/management/management");
    isEnd = true;
}

if (isEnd) {
    mav.setViewName("/redirect");
    return mav;
}

isEnd를 false로 초기화하고 각 if마다 true 값을 넣어주었다. if문이 다 끝나고 isEnd에서 최종적으로 반복되는 return문을 수행하도록 바꿔주었다. 한 층 더 나은 코드가 되었다.

 

또, 다른 방법으로 찾아보니 if를 인터페이스화 해서 가능하면 최대한 덜 사용하도록 바꿔 줄 수도 있는 것 같다. 조만간 관련 예제도 찾아 연습해 봐야겠다.

반응형

댓글