1. 변수 또는 배열의 제거 방법
IDL에서 생성된 변수 또는 배열을 제거하려면 어떻게 해야 할까요? 여기서 “제거”의 의미는 메모리상에서 없앤다는 의미입니다. 즉 그 변수나 배열이 점유하고 있던 메모리를 해제해주는 것입니다. 만약 다수의 변수 또는 배열들을 사용하는 프로그램에서는, 어느 단계 이후에 더 이상 필요없는 항목들을 제거해주는것이 효율적일 수도 있습니다. 이러한 효율성을 위하여 변수나 배열을 인위적으로 제거해주는 것이 필요할 것입니다. IDL 프로그램 내에서 변수나 배열을 제거하기 위해서는 !null 또는 TEMPORARY 함수를 적절히 활용해주면 됩니다. 예를 들어 다음과 같이 배열 a를 정의한 다음 HELP로 확인해보면 당연히 해당 정보가 출력될 것입니다.
a = FINDGEN(100)
HELP, a
A INT = 10
그런데 다음과 같이 !null 값을 이용하면, 배열 a의 값을 !null로 대체함으로써 사실상 a를 메모리상에서 제거하는 효과를 얻을 수 있습니다.
a = FINDGEN(100)
a = !null
HELP, a
A UNDEFINED = !NULL
그리고 다음과 같이 !null과 TEMPORARY 함수를 혼용하는 방법도 있습니다.
a = FINDGEN(100)
!null = TEMPORARY(a)
HELP, a
A UNDEFINED = <Undefined>
이 방법으로도 역시 유사한 효과를 얻을 수 있습니다. 물론 HELP에 의하여 출력된 문구 자체는 약간 다르긴 하지만, 배열 a가 점유하고 있던 메모리가 제거된다는 측면은 동일합니다. 따라서 둘 중 어느 방법을 사용해도 큰 차이는 없다고 봐도 됩니다.
사실 변수나 배열을 제거하는데 있어서 사용 가능한 DELVAR라는 명령이 있긴 합니다. 그런데 이 DELVAR 명령은 IDL 커맨드 프롬프트 모드에서만 제거의 효과를 제대로 발휘할 뿐이고, IDL 프로그램 내에서 사용될 경우에는 전혀 효과가 없다는 점을 유의해야 합니다. 즉 다음과 같이 IDL의 커맨드 프롬프트상에서 DELVAR 명령을 이용하면 제거의 효과가 제대로 반영됩니다.
IDL> a = FINDGEN(100)
IDL> DELVAR, a
IDL> HELP, a
A UNDEFINED = <Undefined>
하지만 이 내용이 IDL 프로그램 내에 포함되어 있을 경우에는 이 프로그램을 실행해도 제거의 효과가 전혀 없습니다. 즉 다음과 같은 내용이 담긴 프로그램을실행해보면 알 수 있습니다.
PRO test_delvar
a = FINDGEN(100)
DELVAR, a
HELP, a
END
A FLOAT = Array[100]
따라서 IDL 프로그램 내에서 변수나 배열을 직접 제거하기 위해서는 DELVAR를 사용하지 말고 앞서 언급한 두가지 방법(!null과 TEMPORARY의 이용)을 적용해야 제대로 효과를 볼 수 있다는 점을 반드시 유념하시기 바랍니다.