목록

using키워드

먼저, 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에서 쓸 일이 있을까?..