IDisposable, using 문
IDisposable을 구현하고, 결정적 정리를 위해 using 문을 사용하며, 수동 try/finally와 비교합니다. C# 6 전용입니다.
IDisposable, using 문은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
IDisposable과 using을 사용하는 이유
목표: 리소스를 결정적으로 해제합니다.
- IDisposable을 구현합니다.
- using 문(C# 6)을 사용합니다.
- try/finally와 비교합니다.
- 정리 작업은 작고 안전하게 유지합니다.
IDisposable 구현
IDisposable.Dispose를 구현하여 리소스(파일, 소켓, 핸들)를 해제하십시오. 여러 번 호출해도 안전하게 유지하십시오.
using System;
// Simple disposable that tracks whether it was cleaned up
public sealed class FakeConnection : IDisposable
{
public bool IsOpen { get; private set; }
public FakeConnection()
{
IsOpen = true;
Console.WriteLine("Open");
}
public void Dispose()
{
if (IsOpen)
{
IsOpen = false;
Console.WriteLine("Close");
}
}
}
public class Program
{
public static void Main(string[] args)
{
FakeConnection c = new FakeConnection();
c.Dispose(); // manual cleanup
}
}
try/finally 패턴
try/finally는 정리를 보장하지만 장황하고 빠뜨리기 쉽습니다. using 문은 이를 간단히 표현한 것입니다.
using System;
public sealed class FakeConnection : IDisposable
{
public void Dispose() { Console.WriteLine("Dispose called"); }
public void Send(string msg) { Console.WriteLine("Send: " + msg); }
}
public class Program
{
public static void Main(string[] args)
{
// Manual try/finally
FakeConnection a = null;
try
{
a = new FakeConnection();
a.Send("A");
throw new Exception("boom");
}
finally
{
if (a != null) a.Dispose(); // runs even on exception
}
// unreachable due to thrown exception in this demo
}
}
using 문 데모
using 문은 숨겨진 try/finally로 감싸며, 블록이 끝날 때 Dispose가 호출됩니다.
using System;
public sealed class FakeConnection : IDisposable
{
public void Dispose() { Console.WriteLine("Dispose called"); }
public void Work() { Console.WriteLine("Working"); }
}
public class Program
{
public static void Main(string[] args)
{
try
{
using (FakeConnection c = new FakeConnection())
{
c.Work();
throw new InvalidOperationException("oops");
} // Dispose runs here automatically
}
catch (Exception)
{
Console.WriteLine("Handled");
}
}
}
using을 사용한 I/O
대부분의 I/O 형식은 IDisposable을 구현합니다. 핸들이 즉시 닫히도록 using을 사용하십시오.
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
// Create a small temp file then read it
string path = "demo.txt";
File.WriteAllText(path, "hello");
using (StreamReader r = new StreamReader(path))
{
string text = r.ReadToEnd();
Console.WriteLine(text);
} // r.Dispose() closes the file handle
}
}
using 팁 및 주의점
팁:
- 수동 Dispose 호출보다 using을 우선하십시오.
- Dispose는 작고 안전하게 유지하십시오(가능하면 예외를 발생시키지 마십시오).
- 삭제된 객체를 사용하지 마십시오.
- 여러 리소스를 사용할 때는 using 블록을 중첩하여 순서를 제어하십시오.
using 문의 보장 사항
복습
복습: 리소스에는 IDisposable을 구현하고, C# 6에서 숨겨진 try/finally를 통해 정리가 보장되도록 사용 부분을 using 블록으로 감싸십시오.
자주 묻는 질문
“IDisposable, using 문” 강의는 무료인가요?
네 — “IDisposable, using 문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“IDisposable, using 문”에서 뭘 배우나요?
IDisposable을 구현하고, 결정적 정리를 위해 using 문을 사용하며, 수동 try/finally와 비교합니다. C# 6 전용입니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.
“IDisposable, using 문” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- try/catch/finally, throw new와 다시 던지기
- 사용자 지정 예외와 오류 설계
- IDisposable, using 문