프로그램이 어떠한 예외가 발생하게 되면 비정상적인 동작을 하게 된다. 그래서 프로그램이 끝나거나 이상한 동작을 수행 하는데, 이것을 방지 하기 위해서 예외처리를 해준다. try,catch,finally 응 이용해서.

try : 예외가 발생할만한 의심 스러운 코드를 try구문안에 넣어준다.
catch : 예외가 발생되면 그 발생된 예외를 받아 처리 하는 부분이다.
finally : 예외가 발생되든 되지 않던 무조건 처리 하는 부분이다.



위에것은 일반적인 사실이다. 그런데 참 우수운것 같다. 일부러 발생시킨 예외를 제외하고 누가 예외 날것을 알고 프로그램을 하는가? 그렇지만 그래도 모를 예외에 관련 되서 try구문을 사용한다고 봤을때 혹시 또 누가 알것인가? 예외처리를 잡아주려고 한 catch 문에 또 예외가 발생한다면? 아니면 무조건 처리 하는 부분에서의 finally 에서의 예외가 발생한다면? 두가지 상황을 알아 보았다.

일반적인 예외 발생 소스

using System;
public class ExceptionInCatch
{
 public static void Main()
 {
  string s = null;
  try
  {
   Console.WriteLine("try 문 \n예외 발생");
   Console.WriteLine(s.ToString());
  }
  catch
  {
   Console.WriteLine("catch 문");
  }
  finally
  {
   Console.WriteLine("finally 문");
  }
 }
}
 


결과

try 문
예외 발생
catch 문
finally 문



다음과 같은 간단한 예외를 발생시켜 보았다. 이제 catch 구문 안에 예외를 발생 시켜 보겠다.

수정 부분

  catch
  {
   Console.WriteLine("catch 문");
   Console.WriteLine(s.ToString());
  }
 



결과
일반 예외 처리를 안한 것처럼 다음과 같은 결과가 나왔다.

try 문
예외 발생
catch 문

처리되지 않은 예외: System.NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
  위치: ExceptionInCatch.Main()
finally 문



그렇다면 finally 구문 안에서의 예외는?

수정부분

  finally
  {
   Console.WriteLine("finally 문");
   Console.WriteLine(s.ToString());
  }
 



결과
catch문에서와 비슷한 결과가 나오게 되었다.

C:\Test\C#>ExceptionInCatch
try 문
예외 발생
catch 문
finally 문

처리되지 않은 예외: System.NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
  위치: ExceptionInCatch.Main()


그렇다면 사람이 신도 아니고 catch나 finally 안에서 나는 Exception의 처리는 어떻게 해야 하나?

방법은 아주 간단 하였다. catch 안이나 finally 안에서 또 try,catch,finally 를 쓰면 그 안에서 난 예외도 다시 처리할수 가 있었다.


using System;
public class ExceptionInCatch
{
 public static void Main()
 {
  string s = null;
  try
  {
   Console.WriteLine("try 문 \n예외 발생");
   Console.WriteLine(s.ToString());
  }
  catch
  {
   Console.WriteLine("catch 문");
   try
   {
    Console.WriteLine(s.ToString());
   }
   catch
   {
    Console.WriteLine("catch문 안에서의 예외처리");
   }
  }
  finally
  {
   Console.WriteLine("finally 문");
   try
   {
    Console.WriteLine(s.ToString());
   }
   catch
   {
    Console.WriteLine("filally문 안에서의 예외처리");
   }
  }
 }
}
 


결과

C:\Test\C#>ExceptionInCatch
try 문
예외 발생
catch 문
catch문 안에서의 예외처리
finally 문
filally문 안에서의 예외처리


결론은 글세 뭐 catch에서의 Exception 등의 예외는 다시 그 안에 try구문을 사용하여 다시 처리 할수 있다. 라는 짤막한 결론이 나왔다.


div>