IDL/Object Graphics

Object Graphics in IDL [07]

이상우_idl 2010. 8. 28. 02:12
728x90
반응형

객체의 제거 (Destroying Objects)


생성해서 목적에 맞게 사용된 객체들은 더 이상 사용될 필요가 없다면 직접 제거해줘야 한다. 이에 관한 필요성은 앞서 이미 언급이 되었던 것으로 생각한다. 특히 Object Graphics 기반의 작업을 수행하는 IDL 프로그램을 만드는 경우, 프로그램 내에서 필요한 객체들을 생성해서 사용한 후 이들을 제거하는 문구를 넣어야 한다는 사실을 망각하기 쉽다. 예를 들면 다음과 같은 경우이다.

PRO my_objects

oPlot = OBJ_NEW(‘IDLgrPlot’, FINDGEN(10))

oXAxis = OBJ_NEW(‘IDLgrAxis’, 0, RANGE=[0, 10])

oYAxis = OBJ_NEW(‘IDLgrAxis’, 1, RANGE=[0, 10])

~~~~~ (그 외 필요한 작업들 수행에 필요한 문구들)

END

이런 프로그램을 짜서 테스트 및 디버깅을 위하여 여러차례 반복해서 실행하다보면, 왠지 모르게 점점 무겁고 느려지는 듯한 느낌이 들 수가 있다. 그래픽 객체를 생성하는데 있어서 기반이 되는 자료의 크기가 크거나 많은 그래픽 객체들이 등장하는 프로그램일수록 더욱 그러할 것이다. 이는 비록 객체들이 my_objects라는 프로그램내에서 선언이 되지만, 이들이 차지하는 메모리는 프로그램이 끝난다고 해서 자동으로 알아서 제거되지는 않기 때문이다. 오히려 이 프로그램을 반복 수행할 때마다 자꾸 객체 생성이 이루어지다보니 점점 더 많은 메모리가 점유되는 바람직하지 못한 상황으로 치닫게 될 수도 있다.

따라서 프로그램 내에서 이 객체들을 제거하는 문구도 반드시 들어가야만 한다. 이와 같은 역할을 하는 명령이 바로 obj_destroy이다. 이 명령을 사용하는 방법은 다음과 같이 아주 간단하다. 명령문을 적고 그 뒤에 제거하고자 하는 객체의 이름을 적으면 된다.

OBJ_DESTROY, oPlot

OBJ_DESTROY, oXAxis

OBJ_DESTROY, oYAxis

이와 같은 문구를 END 전에 어디엔가 꼭 적어줘야만 할 것이다. 그런데 프로그램 내에서 생성된 객체들의 갯수가 꽤 많을 경우, 위와 같은 문구들을 각 객체마다 적어주려면 좀 번거로울 것이다. 그래서 프로그램 종료 전에 모든 객체들을 한꺼번에 제거하고자 한다면 다음과 같은 표현을 사용하는 것이 효율적일 것이다.

OBJ_DESTROY, OBJ_VALID()

여기서 OBJ_VALID()는 기존에 존재하는 객체들 전체를 의미한다. 따라서 위와 같은 문구를 사용하면, 기존에 존재하는 어떤 객체든 일거에 박멸해주는 탁월한 효과를 지닌 함수라 할 수 있겠다. 물론 프로그램의 말미에서 항상 이렇게 모든 객체들을 모조리 제거하는 것이 적당하지 않은 경우도 있다. 하지만 이러한 경우들의 예는 나중에 등장하게 되면 좀 더 자세히 알아보기로 하자.

여하튼간에, 중요한 것은 본인이 생성한 객체는 반드시 본인이 책임지고 제거하는 것을 잊지않아야 한다는 점이다. 이것은 그 프로그램의 원활한 구동과 깔끔한 마무리를 위하여 반드시 지켜져야만 하는 덕목임을 유념하기 바란다.

반응형

'IDL > Object Graphics' 카테고리의 다른 글

Object Graphics in IDL [09]  (0) 2010.09.27
Object Graphics in IDL [08]  (0) 2010.09.16
Object Graphics in IDL [06]  (0) 2010.08.25
Object Graphics in IDL [05]  (0) 2010.08.20
Object Graphics in IDL [04]  (0) 2010.08.14