이번에 소개할 ISA 함수는 얼마전 별도의 게시물을 통하여 소개했던 TYPENAME 함수와 유사한 측면도 있지만, 좀 더 확장된 기능을 갖고 있습니다. ISA 함수 역시 TYPENAME 함수와 마찬가지로 IDL 8.0 버전부터 도입된 함수입니다. 그러면 관련 예제들을 통하여 이 함수의 기능을 살펴보기로 하겠습니다.
이 함수는 결과를 항상 1 또는 0이라는 값으로 전달합니다. 즉 주어진 인자가 특정한 자료형(Data 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가 그냥 단일값 변수로 정의된 상태이기 때문에 0이란 값을 돌려줍니다. 하지만 다음과 같이 배열로 정의된 b에 대하여 이 함수를 /ARRAY 키워드와 함께 사용하여 적용하면 b가 배열이라는 의미로서 1이란 값을 돌려받게 됩니다.
IDL> b = INDGEN(10)
IDL> PRINT, ISA(b, /ARRAY)
1
그리고 /NUMBER 키워드를 사용하면 대상 인자가 숫자인가 아닌가 여부를 판단할 수 있습니다.
IDL> PRINT, ISA(a, /NUMBER)
1
만약 다음과 같이 a가 문자값인 경우에는 0이란 값을 돌려받게 됩니다.
IDL> a = 'IDL'
IDL> PRINT, ISA(a, /NUMBER)
0
그리고 위와 같은 키워드들 대신 자료형(Data Type)에 해당되는 문자열을 추가 인자로 사용함으로써, 대상 인자가 그 자료형에 부합되는가 여부를 판단할 수도 있습니다. 즉 다음과 같은 방식으로 사용하여 대상 인자가 실수형이냐 정수형이냐 또는 문자형이냐 등을 판단하는 것입니다.
IDL> a = 5.8
IDL> PRINT, ISA(a, 'float')
1
IDL> PRINT, ISA(a, 'int')
0
IDL> a = 'IDL'
IDL> PRINT, ISA(a, 'string')
1
또한 ISA 함수에 대하여 다음과 같이 구조체를 인자로 투입할 수도 있습니다. 그러면 그 구조체가 익명 구조체인가 또는 고유 이름을 갖는 기명 구조체인가 여부를 판단할 수 있습니다. 이러한 판단을 위해서는 다음과 같이 'anonymous'라는 문자값을 추가로 사용하여 익명이면 1 기명이면 0을 돌려받는 방식으로 처리하면 됩니다.
IDL> str = {name:'JH Lee', team:'Giants'}
IDL> PRINT, ISA(str, 'anonymous')
1
IDL> str = {my_struct, name:'JH Lee', team:'Giants'}
IDL> PRINT, ISA(str, 'anonymous')
0
ISA 함수에 대하여 다음과 같이 포인터(Pointer)를 인자로 투입하여 사용하는 것도 가능합니다.
IDL> ptr = PTR_NEW()
IDL> PRINT, ISA(ptr, 'pointer')
1
그리고 다음과 같이 객체(Object)를 인자로 투입함으로써 그 객체의 클래스명(Class Name)을 확인할 목적으로 사용하는 것도 가능합니다.
IDL> obj = OBJ_NEW('IDLgrModel')
IDL> PRINT, ISA(obj, 'IDLgrModel')
1
IDL> PRINT, ISA(obj, 'IDLgrImage')
0
이와 같이 ISA 함수의 대상이 객체가 되는 경우에는 클래스명을 문자값 인자로 주면서 대상 객체가 그 클래스가 맞는가 여부를 확인하는 것까지만 가능합니다. 만약 대상 객체의 클래스의 이름 자체를 돌려받고자 할 경우라면 이전에 소개했던 TYPENAME 함수를 사용해야 합니다.
IDL> PRINT, TYPENAME(obj)
IDLGRMODEL
어쨌든 ISA함수는 이와 같이 다양한 용도로 사용할 수 있습니다. 따라서 유저의 목적에 따라 TYPENAME 함수와 함께 번갈아 사용하면 아마 프로그래밍에 있어서 매우 유용한 역할을 할 수 있을 것입니다. ISA 함수에 관한 더 자세한 내용은 IDL 도움말을 참조하시기 바랍니다.
* 이 내용은 지난 2011년에 올렸던 게시물의 내용을 일부 수정하여 다시 새롭게 올리는 내용입니다. 따라서 기존의 게시물은 이번 내용으로 대체되었습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > Data Type & Format' 카테고리의 다른 글
| 리스트(List) 자료형에 관하여 [2] (2) | 2025.06.05 |
|---|---|
| 리스트(List) 자료형에 관하여 [1] (0) | 2025.06.04 |
| TYPENAME 함수의 활용 (0) | 2025.05.29 |
| JSON 파일의 읽기 및 처리 (Hash within List) (1) | 2024.03.05 |
| JSON 파일의 읽기 및 처리 (List within List) (0) | 2024.02.27 |