TYPENAME 함수는 IDL 8.0 버전에서 처음 도입된 함수로서, 그 명칭에서 짐작할 수 있듯이 대상 인자 값의 자료형(Data 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이냐 아니냐 여부를 통하여 확인하는 방식도 가능합니다.
IDL> PRINT, N_ELEMENTS(a)
0
어쨌든 프로그램 내의 특정한 부분에서 변수나 배열의 자료형(Data Type)을 확인해야 할 경우 이 TYPENAME 함수가 매우 유용하게 사용될 수 있습니다. 참고로 이와 유사한 기능을 하는 ISA라는 함수도 있습니다. 이 ISA 함수 역시 IDL 8.0 버전부터 도입된 함수인데 이 함수에 관해서도 나중에 따로 소개해보기로 하겠습니다.
* 이 내용은 지난 2011년에 올렸던 게시물의 내용을 일부 수정하여 다시 새롭게 올리는 내용입니다. 따라서 기존의 게시물은 이번 내용으로 대체되었습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > Data Type & Format' 카테고리의 다른 글
| 리스트(List) 자료형에 관하여 [1] (0) | 2025.06.04 |
|---|---|
| ISA 함수의 활용 (0) | 2025.06.02 |
| JSON 파일의 읽기 및 처리 (Hash within List) (1) | 2024.03.05 |
| JSON 파일의 읽기 및 처리 (List within List) (0) | 2024.02.27 |
| 클래스 기반 문법에 의한 변수 및 배열 처리 [3] (5) | 2024.01.03 |