2009년 1월 8일 목요일

C#의 가비지 컬렉터

C#의 가비지 컬렉터

C#은 여러가지 장점이 있지만, 그 중에서도 다른 언어와 구별되는 장점으로는 가비지 컬렉터(Gabage Collector)를 들 수 있습니다.

C#에서 프로그래머가 생성했던 객체를 언제 제거해야 될까요? 객체를 전혀 사용하지 않을 때가 정답입니다. 메모리가 부족하거나 메모리를 청소해야 할 상황이 되면 가비지 컬렉터는 객체를 검사해서 더 이상 사용되지 않는 객체를 메모리에서 자동으로 제거해 줍니다.

프로그래머가 객체의 소멸도 담당해야 이치에 맞겠지만 그 역할을 주로 담담하는 것이 바로 가비지 컬렉터입니다.

가비지 컬렉터가 제대로 활동하는지 알기는 쉽지 않습니다. 객체를 사용하지 않는데도 전혀 호출되지 않을 수도 있고, 제거하는 순서도 가비지 컬렉터에 의해 임의적으로 결정됩니다.

그렇다면 이런 결점 투성이의 가비지 컬렉터를 왜 사용하는 것일까요?

그 이유는 객체를 소멸해야 하는 적절한 시점을 프로그래머가 판단하기에는 너무나 복잡하고 미묘하기 때문입니다. 가비지 컬렉터는 이 부분을 대신 판단해서 객체를 안전하게 제거해줍니다. 물론, 시스템의 성능을 떨어뜨릴 가능성도 크지만, 가비지 컬렉터를 사용함으로써 얻는 이점이 더 크기 때문에 가비지 컬렉터를 사용한 메모리의 관리를 선택한 것입니다. 차세대 언어의 대부분은 이러한 방식으로 메모리를 관리한다고 할 수 있습니다.

실제 복잡한 어플리케이션에서 객체가 더 이상 사용되지 않는다는 것을 판단하는 것으 그리 간단한 일이 아닙니다. 판단하는 것도 어렵지만, 그보다 더 위험한 것은 사용하지도 않는 객체의 메모리를 제거하지 않고 유지하고 있거나, 잘못 예측해서 사용 중인 객체를 제거했다면 프로그램이 객체에 접근하는 순간 오동작을 일으키거나 갑자기 멈추는 경우가 생기기 때문입니다.

따라서, C#에서는 가비지 컬렉터라는 메모리 관리자를 두어 메모리를 정리합니다. 이 방법은 이전 프로그래밍 언어의 가장 큰 단점을 보완했다고 할 수 있습니다.



[출처]
C#이란?|작성자 웃진

댓글 없음:

댓글 쓰기