C# 프로그래밍 기초 실습 전자책

C# / .NET 알고리즘과 퀴즈
본 알고리즘 퀴즈 문제는 C#/.NET 개발자를 위한 알고리즘 인터뷰 혹은 C# 프로그래밍을 통한
문제 해결 알고리즘을 연구해 보는데 도움이 되고자 작성되었습니다.


퀴즈 질문


예상답변/설명

C#의 using(){...}블럭은 using() 안의 객체가 IDisposable 인터페이스를 구현했을 때 사용할 수 있다. using 블럭은 try ... finally 블럭으로 변경되면서 finally 블럭에서 해당 객체의 Dispose() 메서드를 호출한다.

using (SqlConnection cn = new SqlConnection(str))
{
  //...
}

// 위의 using은 컴파일러에 의해 다음과 같이 변경된다
SqlConnection cn = null;
try
{
   cn = new SqlConnection(str);
   //....
}
finally
{
   if(cn!= null) {
    ((IDisposable)cn).Dispose(); 
   }
}

따라서, C#의 using 블럭은 Unmanaged 리소스를 해제하기 위해 IDisposable 을 구현 클래스의 해제 명령(Dispose 메서드)를 자동으로 호출해 주는 효과가 있다.

[추가질문] 만약 using 블럭 중간에서 에러가 발생했다면, Connection은 어떻게 되는가?
[A] 에러가 발생했다면 Connection이 해제되고 (즉 Dispose가 호출되고) 난 후, 에러를 throw한다.