Try, Catch 문을 대신하여 사용 할 수 있는 루틴

보통 Try, Catch 문이라고 하면 이런식으로 쓰게 될 것입니다.

void function()
{
   Try
   {
    }
    Catch
    {
         Throw;
    }
}

하지만 Throw를 하게 되면 내부적으로  다소 많은 부하가 걸릴 수 있다고 합니다.
(이 부분에 대해서 개발 실장님께 들었는데 정확한 정보는 찾아보지 못했습니다. 찾게 되면 추가적으로 내용을 쓰도록 하겠습니다.)
그래서 대신에 이런 식으로 처리하면 어떨까 합니다.

void function()
{
    do // dummy do
    {
      // 여기가 try
      if(오류) break;
      if(오류) break;

      // 오류에 걸리지 않았다면 처리
      return;
    } while(false)
   // 여기가 catch
    ERROR(“오류가 났습니다.”);
}

특히 서버 같은 경우 최적화가 매우 중요하므로,
특별한 상황이 아니라면 Throw를 이용하지 않는 것이 좋지 않을까 생각합니다.

do 든 while 든 자주 사용하는 것이지만, ‘이런 식으로 응용을 할 수 있구나’ 라고
생각하게 되는 좋은 예제라고 생각합니다.

10 thoughts on “Try, Catch 문을 대신하여 사용 할 수 있는 루틴

    1. goto는 코드를 알아보기 힘들게 하기 때문에 왠만하면 사용하지 않습니다. 장점이 있다기 보다는, 이런식으로도 사용할 수 있다는 생각을 해 보았습니다. ^^ 어떻게 사용하기 나름 아닐까요?

  1. Throw;
    이거 안쓰고 그냥 에러 코드만 남기고, 나중에 에러코드 분석할때 썼었는데..
    Throw로 인해서 서버 다운되더라궁.. 나 누군지 알지 ㅎㅎ 냐옹이 형이얌.. ㅋ

    1. 히힛. 네 잘 알지요~*
      에러 코드만 남기려면 똑같겠지요>_<; throw가 중요한 요점이긴 한데. throw를 많이 쓰긴하지만 내부적으로 어떻게 되고 있는건지는 모르는-_-a

  2. 조금 다른 관점에 말씀 드리면..
    차라리 goto가 날수도 있습니다.
    goto가 스파게티가 되는건 그렇게 만들었을때 만이죠.
    위와 같은 에러처리시에는 오히려 더 알아보기 쉽습니다.
    또 do-while을 안쓰는것을 원칙으로 하는곳도 있습니다.
    왜냐면 일반 while과 햇갈리기 때문이죠.

    ps…
    throw 부하에 관한 내용입니다.
    있으면 안되는 에러에 대해서는 throw도 나쁜 해법은 아닙니다.
    자주 발생하는 상황의 예외를 throw로 처리하면 큰일나죠. –;
    http://blog.naver.com/seeper0/120015975550

    1. 좋은 답변 감사합니다.
      아마도 스타일의 문제는 뭐가 좋다고 딱히 하기 힘든 것 같네요^-^ goto 가 좋을 수도 있고, 다른게 좋을 수도 있듯이~
      throw를 난발하는 소스도 보았기 때문에;;

      좋은 정보 감사합니다^-^

  3. try catch 문은 단순히 if else 문으로 처리할 수 있는 것이 아닙니다.
    try 문 안에서 다른 함수를 호출하고 그 함수가 예외를 던지면 if 문으로 처리할 수 없지요

  4. 개발실장님이 그렇게 말씀하신게
    throw를 하게 되면 워킹셋이 깨지게 되서 그런거 아닐까요?
    goto문도 똑같이 워킹셋이 깨지긴 하네요

    사실 위에 같은 문장에서 보다
    특정 함수 (예를들면 파일을 읽는다거나)에서 예외처리를 하면 편하죠

    근데 2006년에 남기신 글이네요 +_+

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다