| [ CnUnix ] in KIDS 글 쓴 이(By): testors (testors) 날 짜 (Date): 2003년 6월 5일 목요일 오후 03시 35분 22초 제 목(Title): Re: c++ exception handling (윈도, 유닉스 > 제가 vc++의 처리 방식을 "정답"에 가깝다고 한건, > " try ~ catch(...) " 문을 쓰는 이유가 "강인한" 코드를 만들기 위해서라고 > 생각했기 때문입니다. 강인한 코드는 사소한 모든 오류나 예외에 대한 처리를 신경써서 해주고 여러가지 방법론들을 적용, 구조개선등의 과정을 거쳐서 나오는 것이지, 뭔가 정체를 알수 없는 것을 try 로 덮어 싼다고 얻어지는 것이 아닙니다. 강인하다기 보다는 썩어가는 상처를 거대한 반창고로 덮은 격에 지나지 않을까 싶네요. (비단 제시하신 예뿐 아니라 다른 문제들도 있을수 있을테고, 나중엔 곪아서 쓰러지겠죠) 문제가 되는 코드가 있다면 프로그래머가 해야할 일은 그것을 try 등으로 둘러싸는것이 아니라 문제의 원인을 해결 하는 것입니다. 강인하다는 것의 의미를 그런 사소한(?) 오류가 나도 app 가 뻑나지 않고 잘 돌수 있는것을 의미하신것 같은데 그런 예는 exception 의 좋은 용례라고 볼 수는 없습니다. 가령 예를 들자면 void func1() { char *a = new char[100]; float b = 3 / 0; delete [] a; } int main() { try { ... func1() ... } catch(...) { ... } } divide by 0 는 catch 해서 넘어갔다고 해도, func1 의 a 는 누가 해제해 줄까요? 단지 memory leak 이라면 그나마 행복한 상황입니다. 여러가지 다른 것들과 연계되는 동작이 어긋낫다면, 대게 나중에 발견되고 발견 되더라도 이유를 알기 힘들때가 많습니다. 주어진 언어들의 정확한 스펙에 따라, 맡고계신 프로그램의 모든 부분을 완벽하게 손질할 필요가 있다고 봅니다. 물론 모든 부분을 님이 제어하기 힘든 상황일수도 있습니다. 그렇지만 그런 것을 해결하는 여러가지 방법론들도 있답니다. 그럼 오늘도 '프로그래밍의 도' 를 향해 한걸음 더.. - Testors |