개발을 진행하다 보면 Exception 정보의 중요성을 무시하는.. 아니 관심이 없는 개발자들을 많이 본다. Exception 정보야 말로 문제 해결의 근본적인 요소인데 말이다. 그리고 많이 헷갈리는 것 중에 하나가 바로 throw 와 throw(ex) 의 차이점이다. [ throw vs throw(ex) ] 그냥 보기에는 이 둘에는 차이점이 전혀 없어 보인다. 그러나 명확한 차이점이 존재한다. try { ... } catch (Exception ex) { throw ; } 위의 코드는 catch로 Exception을 잡고 그냥 다시 throw 를 하는 것이고 try { ... } catch (Exception ex) { throw (ex); } 위의 코드는 catch로 Exception을 잡고 그 Exception을 throw 하는 것이다. 위의 두 가지 모두 Exception을 catch 했고, 이를 다시 throw 하는 것에서는 같다. 그리고 같은 Exception Message를 제공한다는 점에서는 다른 점이 없다. 그럼 차이점은 무엇일까??? 굉장히 중요한 차이점이 있다. throw 는 현재 Context 상에서 발생한 Exception 정보를 온전하게 가지고 있다. 그러나 throw(ex) 는 처리 시점에 Exception을 Wrapping 하면서 기존의 Stacktrace 를 초기화하게 된다. 따라서 throw(ex)는 예외의 근본적인 정보를 소실할 수 있다는 점이다. 아래의 코드를 기준으로 점검을 해 보도록 하자. using System; namespace ThrowTest { class Program { static void Main( string [] args) { try { DevideByZero(10);