IDL/Data Type & Format

TYPENAME 함수의 활용

이상우_idl 2011. 4. 27. 15:42
728x90
반응형

TYPENAME이라는 함수는 IDL 8.0 버전에서 처음 도입된 함수입니다. 그 이름에서 짐작할 수 있듯이, 주어진 인자의 형(Type)이 무엇인가를 알아내어 전달해주는 기능을 수행합니다. 아주 단순한 기능이지만 프로그래밍에 있어서 꽤 유용하게 사용될 수 있는 기능이기도 합니다.


예를 들어 2라는 값에 대하여 이 함수를 적용하면 다음과 같이 이 값이 정수형이라는 뜻으로 'INT'라는 문자열을 전달받게 됩니다.


IDL> PRINT, TYPENAME(2)

INT


만약 2.0이라는 값을 인자로 주면 다음과 같이 실수라는 의미로 'FLOAT'라는 문자를 전달받게 됩니다.


IDL> PRINT, TYPENAME(2.0)

FLOAT


함수에 들어가는 인자는 값 자체일수도 있고 변수가 될 수도 있습니다. 다음과 같이 Long Integer형의 값을 변수에 담고 그 변수에 대하여 TYPENAME 함수를 적용할 수도 있습니다.


IDL> a = 3L

IDL> PRINT, TYPENAME(a)

LONG


함수에 들어가는 인자가 구조체(Structure)일 경우에는 그 구조체가 고유의 이름을 갖느냐 아니냐에 따라 결과가 좀 다릅니다. 익명 구조체일 경우라면 다음과 같이 'ANONYMOUS'라는 문자를 전달합니다.


IDL> str = {a:1.0, b:3, c:'hahaha'}

IDL> PRINT, TYPENAME(str)

ANONYMOUS


만약 이름이 주어진 구조체인 경우에는 그 이름에 해당되는 문자를 전달한다는 차이점이 있습니다.


IDL> str = {my_struct, a:1.0, b:3, c:'hahaha'}

IDL> PRINT, TYPENAME(str)

my_struct


함수에 들어가는 인자가 객체(Object)일 경우에는 그 객체의 클래스명을 문자로 전달합니다. 예를 들어 다음과 같이 모델 객체에 대하여 적용을 하면 클래스 이름인 'IDLgrModel'이라는 문자를 전달합니다.


IDL> obj = OBJ_NEW('IDLgrModel')

IDL> PRINT, TYPENAME(obj)

IDLGRMODEL


심지어는 사전에 정의되지 않은 변수에 대해서도 다음과 같이 이 함수를 적용할 수 있습니다.


IDL> PRINT, TYPENAME(b)

UNDEFINED


그러면 위와 같이 'UNDEFINED'라는 문자를 전달받게 됩니다. 아마 전통적인 방식을 사용했다면 N_ELEMENTS 함수를 활용하여 그 값이 0이냐 아니냐를 판단했겠지요.


따라서 프로그램내의 어떤 부분에서 변수나 배열의 형(Type)을 확인해야 할 경우, 이 함수가 매우 유용하게 사용될 수 있습니다. 참고로 이와 유사한 기능을 하는 ISA라는 함수도 있습니다. 이 ISA 함수 역시 IDL 8.0 버전부터 도입된 것입니다. 이 함수에 대해서도 기회가 되면 언급하기로 하겠습니다.


* 이 글은 idluser.org 사이트의 IDL Tip 게시판의 115번 게시물로도 보실 수 있습니다.

반응형