using문을 이야기하려면 IDisposable 인터페이스에 대한 이야기를 해야 합니다.

 

기본적으로 닷넷은 가비지 컬렉터에 의해서 모든 리소스를 자동으로 관리한다고 소개하였고 실제로도 그렇습니다. 하지만 중요한 맹점이 하나 있는데, 닷넷 프레임워크 외부의 비관리 영역상의 자원에 대해서는 해당되는 부분이 없습니다. 파일 핸들, 메모리 핸들, 데이터베이스 연결, 소켓 핸들, 스레드 핸들, 세마포어 등의 모든 비관리 자원들에 해당되는 것입니다.

 

단순히 가비지 컬렉터에 의하여 처리되기를 기다린다면 이들 자원들은 사용량이 집중될 경우 고갈되어 시스템에 문제가 생길 수 있습니다. 따라서 이를 사전에 예방하고 효율적으로 관리하기 위해서 명시적인 소멸자를 직접 구현할 수 있는데, 이것이 IDisposable 인터페이스를 통해서 가능합니다.

 

본디, IDisposable 인터페이스로 소거를 시도하기 위해서는 아래와 같은 모양의 문법을 사용합니다.

 

IDisposable myObj = new SomethingDisposable();

 

try { /* try something here with myObj */ }

catch { throw; }

finally { if (myObj != null) myObj.Dispose(); }

 

위의 코드를 문법적으로 잘 포장한 것이 using 문입니다.

 

using (IDisposable myObj = new SomethingDisposable())

{

   /* try something here with myObj */
}


출처 http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=117078&ref=117075



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteNonQuery();
}
 
 
//위아래 코드는 같다
//저절로 close가 됨
 
{
    SqlConnection connection = new SqlConnection(connectionString);
 
    try 
    {            
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery(); 
    }
    finally
    {
        if (connection != null)
            ((IDisposable)connection).Dispose();
    }
}
cs


'C#' 카테고리의 다른 글

엑셀 다루기  (0) 2019.01.30
C# 최소값 구하기(알고리즘)  (0) 2019.01.30
C# 최대값 구하기(알고리즘)  (0) 2019.01.29

+ Recent posts