using

using 의 사용 용법은 2가지가 있다.


1.지시문(Directive)


다른 네임스페이스에 정의된 타입을 Import 하거나, 네임스페이스에 대한 별칭을 만들때 사용한다.


2.문장(Statement) 


개체의 범위를 정의할때 사용한다. 그 범위를 벗어나면 자동으로 Dispose 된다.


File이나 Font, DB Connection 관련 클래스들은 관리되자 않는 리소스에 액세스 한다. 다 사용후 적절하게 Dispose해서 자원을

반납해야 한다. 하지만 종종 Dispose를 하지 않아서 리소스가 낭비되거나 DB Connection 같은 것을 Open만하고 Close하지 않으면

문제가 발생한다. 


이때, 일일이 Close하지 않고 Using을 이용하면 그 범위를 벗어나면 자동으로 Dispose 되서 관리가 쉬워진다.




위처럼 Connection을 Using 구문으로 사용하면 {} 범위를 벗어나면 자동으로 Dispose가 된다.

using 문은 개체의 메서드를 호출하는 동안 예외가 발생하는 경우에도 Dispose가 호출되도록 한다. 

try 블록 내에 개체를 배치한 다음 finally 블록에서 Dispose를 호출해도 동일한 결과를 얻을 수 있다. 



using문을 사용한 리소스 관리는, 좋고 나쁨을 따질수 있는 선택적인 사항이 아니라, 반드시 숙지하고 활용해야 할 사항이다. 

 

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

 

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

 

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



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

Dispose/Finalize  (0) 2016.12.08
박싱과 언박싱  (0) 2016.12.07
프로젝트 exe 파일(Release 버전) 생성  (1) 2016.11.15
ListBox items Random 함수 사용  (0) 2016.11.15

+ Recent posts