C#의 using 문은 하나 이상의 리소스를 선언하고, 해당 리소스를 사용한 후 자동으로 해제하기 위해 사용됩니다. 특히 파일 입출력, 데이터베이스 연결 등 외부 리소스를 다루는 작업에서 널리 활용되며, 데이터베이스 작업 시에도 자주 사용됩니다.
using 문의 주요 목적
using 문의 가장 큰 목적은 리소스를 효율적으로 관리하고 사용이 끝난 모든 리소스를 자동으로 해제하는 것입니다. 코드 블록을 벗어나는 순간 Dispose 메서드가 호출되므로, 개발자가 일일이 리소스를 정리하지 않아도 되어 메모리 누수를 예방할 수 있습니다.
예제 코드
다음 예제를 살펴보겠습니다. SystemResource가 먼저 할당되기 때문에 "A"가 가장 먼저 출력됩니다.
using System;
using System.Text;
class Demo {
static void Main() {
using (SystemResource res = new SystemResource()) {
Console.WriteLine("A");
}
Console.WriteLine("B");
}
}
class SystemResource : IDisposable {
public void Dispose() {
Console.WriteLine("C");
}
}실행 결과
A C B
결과 분석
출력 순서를 보면 그 동작 원리를 쉽게 이해할 수 있습니다.
1. "A" 출력: using 블록 안에 진입하면 SystemResource 객체가 생성되고, 블록 내부의 코드가 실행됩니다.
2. "C" 출력: using 블록이 끝나는 순간 Dispose() 메서드가 자동으로 호출되어 리소스가 해제됩니다.
3. "B" 출력: 리소스 해제가 완료된 후에야 using 블록 바깥의 코드가 실행됩니다.
이처럼 using 문은 IDisposable 인터페이스를 구현한 객체의 Dispose 메서드를 블록 종료 시점에 자동으로 호출해 주기 때문에, try-finally 구문 없이도 안전하게 리소스를 관리할 수 있습니다.