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번 게시물로도 보실 수 있습니다.
'IDL > Data Type & Format' 카테고리의 다른 글
문자형 값에 대하여 숫자냐 문자냐 여부를 구분하려면? (0) | 2015.02.23 |
---|---|
새로운 Data Type인 해쉬(Hash)에 관하여 (0) | 2011.05.16 |
새로운 Data Type인 리스트(List)에 관하여 [2] (0) | 2011.05.09 |
새로운 Data Type인 리스트(List)에 관하여 [1] (0) | 2011.05.06 |
ISA 함수의 활용 (0) | 2011.04.29 |