|
'예외처리'에 해당되는 글 2건
[폭주기관차, 2007/12/20 22:52, [Programming]/Visual C++ API/MFC]
예외처리는 Java에서 처음 개념을 봤다.
VB에서의 ON ERROR GOTO ~ 처럼 에러가 나면 자동으로 그 분기로 점프하는건줄 알았는데 그거랑은 약간 달른 것이었다. 하지만 조금만 생각해보니 ON ERROR GOTO도 구현할 수 있을꺼 같았고 오히려 ON ERROR GOTO보다 더 유용할 뜻 보인다. (이전까지는 예외 처리가(try ~ catch가) 왜 있는지 몰랐다.) 우선 내가 그동안은 try ~ catch를 등한시 여기다가 갑자기 관심을 갖게 된 것은 필요한 곳을 찾았기 때문이다. 그동안 코딩을 하면서 메모리 누수가 발생해도 어쩌다가 발생한거니 그리 크게 생각 안하고 대충 프로그램 다시 실행하여서 오류 안나는 동작만 하곤 했다. 하지만 try ~ catch를 다시 곰곰히 보니 어떻게 써야 할지 알았다. char *pMem = (char *)malloc( 40 * sizeof( char ) );여기서 처럼 난 항상 if문으로 에러 났을 경우 상황을 대처하곤 했다. 그래도 별 문제는 없었다. 하지만 오늘 발생하고야 말았다. 그것은 if문으로 에러 처리를 할 경우 코드가 너무 방대해지고, 같은 코드를 계속 넣어야 한다는 것이다. if( pMem != NULL )프로그램 수행중 에러가 나고 함수에서 빠져 나갈때 잡았던 메모리를 풀어줘야 한다. 그런데 이 구문을 수행하지 않고 리턴을 하게 된다면, 처음에야 오류가 나지 않지만 나중에 가서 알 수 없게 오류가 발생하게 된다. 물론 코딩할때 신중하게 저 코드를 다 써준다면 괜찮지만, 문제는 귀차니즘과 유지보수에 있다. 저런 코드를 매번 삽입하는 번거로움은 둘째 치고, 만약 메모리 변수를 하나 더 선언하게 된다면? char *pTmp = (char *)malloc( 10 * sizeof( char ) );이 변수를 추가 한다면 return FALSE, return TRUE; 구문 전에 free(pTmp) 라는 구문을 더 추가 해줘야한다. 한 줄 뿐이겠지만, 나중에 코드가 복잡해진다면 일일이 찾아 넣기란 매우 번거롭고 헷갈릴 것이다. 이를 try ~ catch문으로 쉽게 해결 할 수 있게 되었다. < try ~ catch문의 간단한 이론 부분 보기 > - 클릭 중요한것은 try, catch, throw 우선 위의 예제부터 try ~ catch로 바꾸어 보자 char *pMem = (char *)malloc( 40 * sizeof( char ) );{ if( pMem != NULL )return bResult;이렇게 변할 것이다. 길이 상으론 오히려 더 복잡해 보인다. 하지만 프로젝트가 커질 수록 오히려 이런 방식이 유지보수하고, 오류 처리에 더 간단할 것이다. 그리고 try ~ catch에 관한 또 다른 예제문도 밑에 있다. 그냥 지나치기엔 안깝고도 자세한 설명이기에 그대로 긁어옴 (출처는 맨 밑에 표기 해뒀습니다) <좀더 자세한 예제 보기> 출처 : kv20님의 글 Trackback Address :: http://kongmks.cafe24.com/trackback/271
[폭주기관차, 2007/08/22 09:50, [Programming]/Visual C++ API/MFC]
CInternetSession m_Session;
CFtpConnection *m_pConnection = NULL; try { //Anonymous로 로그인 m_pConnection = m_Session.GetFtpConnection("ftp.test.co.kr"); // 사용자명과 패스워드 로그인 /* m_pConnnection = m_Session.GetFtpConnection("ftp.test.co.kr","User_Name","Password"); */ } catch (CInternetException *m_pEx) { // 에러메세지 출력 m_pEx->ReportError(MB_ICONEXCLAMATION); m_pConnection = NULL; m_pEx->Delete(); } delete m_pConnection; 출처 : mtcook님의 블로그 Trackback Address :: http://kongmks.cafe24.com/trackback/245
|
||





