먼저, IDisposable인터페이스
에 대하여 알아야 하는데.
기본적으로C#은 가비지 컬렉터에 의해 리소스를 자동으로 관리
하는데, 단순히 가비지 컬렉터에 의해 처리되기를 기다리면 이들 자원들은 사용량이 집중될 경우 고갈되어 메모리 부족할 수 있으므로 효율적관리를 위해 명시적인 소멸자를 직접 구현할 수 있는데 이것이 IDisposable인터페이스를 통해 가능하다.
GC는 창핸들, 열린파일, 스트림, 소켓등과 같은 관리되지 않은 리소스들은 인식못하므로 직접 해줘야한다.
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 */
}
다른 참고 예제로 일반적인 StreamReader사용
StreamReader reader = new StreamReader("content.txt");
string content = reader.ReadToEnd();
// content 활용 코드 수행
reader.Close();
ReadToEnd() 메소드를 수행하는 과정에서 오류가 발생할 가능성이 있다. 이 때에 Close()가 호출되지 않고 반환될 가능성이 있고, 이러한 문제를 대응하기 위해 흔히들 try-catch-finally 구문으로 대체
StreamReader reader = new StreamReader("content.txt");
try {
string content = reader.ReadToEnd();
} catch(IOException e) {
Debug.Log ("Error: " + e.Message);
} finally {
reader.Close();
}
위와 같은 방식이 아닌 using블록을 사용하면 더 간결하게 처리할 수 있다.
using (StreamReader reader = new StreamReader("content.txt")) {
string content = reader.ReadToEnd();
// content 활용 코드 수행
}
근데 unity에서 쓸 일이 있을까?..