요새 조금씩 C# 을 보다보니 네임스페이스 지정할때 사용하는 using 지시문과 다르게

using 문이 따로 있는것을 보았음;;


구글링하다보니 MSDN 과 데브피아의 한분이 자세하게 설명해준게 있어 링크 검.


MSDN

데브피아

using문을 사용한 리소스 관리는, 좋고 나쁨을 따질수 있는 선택적인 사항이 아니라, 반드시 숙지하고 활용해야 할 사항입니다. 질문에서 약간 벗어난 이야기를 답으로 드리니 참고하셨으면 합니다.

 

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 */
}

+ Recent posts