IDL/Data Type & Format

ISA 함수의 활용

이상우_idl 2011. 4. 29. 18:41
728x90
반응형

이번에 소개할 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번 게시물로도 보실 수 있습니다.

반응형