이번에 소개할 ISA라는 함수는 바로 앞 게시물에서 소개했던 TYPENAME 함수와 유사해 보이지만, 좀 더 확장된 기능을 갖고 있습니다. TYPENAME 함수와 마찬가지로 IDL 8.0버전부터 도입된 함수입니다. 여러가지 사용 예제들을 통하여 이 함수의 기능을 살펴보기로 하겠습니다.
이 함수는 항상 0 또는 1을 전달합니다. 즉 주어진 인자가 특정한 형(Type)인지 또는 클래스인지 등등에 관하여 판단을 하고 그 결과를 참 또는 거짓에 해당되는 논리값인 1 또는 0으로 전달하는 것입니다. 먼저 사전에 정의되지 않은 변수에 대하여 이 함수를 적용하면 다음과 같이 0이란 값을 출력합니다. 즉 존재하지 않는 변수라는 의미입니다.
IDL> PRINT, ISA(a)
0
물론 a라는 변수를 정의하고 난 다음에 이 함수를 사용하면 다음과 같이 1이란 값을 돌려줍니다.
IDL> a = 1.0
IDL> PRINT, ISA(a)
1
이 함수에서는 몇가지 키워드들을 함께 사용할 수 있습니다. 다음과 같이 /ARRAY라는 키워드를 사용하면 인자가 단일값인지 배열인지를 판단할 수 있습니다.
IDL> PRINT, ISA(a, /ARRAY)
0
따라서 만약 a가 배열의 형태를 갖고 있을 경우 1이란 값을 돌려받게 됩니다. 그리고 /NUMBER라는 키워드를 사용하면 인자가 숫자냐 아니냐를 판단할 수 있습니다.
IDL> PRINT, ISA(a, /NUMBER)
1
따라서 a가 문자열일 경우라면 0이란 값을 돌려받게 되겠지요. 또한 이와 같은 키워드들외에 형(Type)에 해당되는 문자열을 추가로 사용하여, 대상인자가 그 형에 부합되는가를 판단할 수도 있습니다. 따라서 다음과 같이 인자가 실수형이냐 정수형이냐 또는 문자형이냐 등을 판단할 수 있습니다.
IDL> PRINT, ISA(a, 'Float')
1
IDL> PRINT, ISA(a, 'Int')
0
IDL> PRINT, ISA(a, 'String')
0
이 함수는 다음과 같이 구조체를 인자로 하여 적용할 수도 있습니다. 따라서 그 인자가 익명 구조체냐 아니면 고유명을 갖는 구조체냐에 대한 판단도 할 수 있습니다.
IDL> str = {name:'Choo', team:'Indians'}
IDL> PRINT, ISA(str, 'Anonymous')
1
IDL> str = {'my_struct', name:'Choo', homerun:4}
IDL> PRINT, ISA(str, 'my_struct')
1
IDL> PRINT, ISA(str, 'Anonymous')
0
다음과 같이 포인터에 대해서도 적용 가능합니다.
IDL> ptr = PTR_NEW()
IDL> PRINT, ISA(ptr, 'Pointer')
1
그리고 객체 클래스에 대해서도 다음과 같이 클래스명을 판단할 때 사용 가능합니다.
IDL> obj = OBJ_NEW('IDLgrModel')
IDL> PRINT, ISA(obj)
0
IDL> PRINT, ISA(obj, 'IDLgrModel')
1
IDL> PRINT, ISA(obj, 'IDLgrImage')
0
물론 클래스의 이름을 얻고자 할 경우라면 전에 소개했던 TYPENAME 함수를 사용해야 합니다.
어쨌든 ISA함수는 이와 같은 다양한 용도로 사용할 수 있습니다. 따라서 TYPENAME함수와 함께 목적에 맞게 교대로 사용하면 아마 프로그래밍에 있어서 매우 유용한 역할을 할 수 있을겁니다. 여기엔 미처 나와있지않는 좀 더 자세한 내용은 IDL 도움말을 참조하시기 바랍니다.
* 이 글은 idluser.org 사이트의 IDL Tip 게시판의 116번 게시물로도 보실 수 있습니다.
'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 |
TYPENAME 함수의 활용 (0) | 2011.04.27 |