Object Graphics에서는 그래픽을 구성하는 각각의 요소들이 하나의 블록들처럼 간주되고 이러한 블록들을 마치 레고조립을 하는 것처럼 차곡차곡 쌓는 방식으로 구현이 된다. 이 때 각각의 블록에 해당되는 개별 요소들은 하나의 클래스(Class)로서 정의가 된다. 아마 C++이나 그 외 오브젝트 기반의 프로그래밍 경험이 있는 사람들이라면 이 클래스라는 개념이 매우 익숙할 것으로 생각이 된다. 하지만 이러한 경험이 없다고 해도, 클래스라는 것은 그래픽적인 성격에 따른 종류를 정의한 것이며, 각각의 요소들은 이 클래스를 기반으로 정의되면서 생성된다는 점만 일단 기억해두면 좋을 것이다.
객체의 생성 (Creating Objects)
이제 Object Graphics를 기반으로 작업을 시작하기 위해서는 무엇을 해야할까? 일단 뭔가를 만들어야 할 것이다. 즉, 필요한 객체를 생성(Creation)하는 과정이 가장 먼저 필요하다. 예를 하나 들어보자, 우리가 plot을 그릴 때 가장 기본이 되는 구성요소는 바로 축(Axis)이다. 2차원 plot이라면 x, y 두 개의 축이 있을 것이다. Object Graphics에서는 각각의 축이 하나의 객체가 된다. 다음은 X축 하나를 생성하기 위하여 사용되는 IDL 문구이다.
myAxis = OBJ_NEW(‘IDLgrAxis’, 0, RANGE=[0, 20])
여기서 먼저 주목할 부분은 OBJ_NEW라는 함수와 IDLgrAxis라고 되어 있는 문자열이다. OBJ_NEW 함수는 객체를 생성하는 역할을 한다. 이 때 생성되는 객체가 어떤 클래스에 속하는 것인지를 정의해야 하는데, 여기서 ‘IDLgrAxis’라는 문자열이 바로 축(Axis)에 해당되는 클래스를 의미한다. 그리고 그 뒤에 붙은 0이라는 값은 X축이라는 의미의 인덱스이며, RANGE 키워드에서는 생성될 X축의 범위가 정의되는 방식이다. 여기서 알 수 있는 것은, Y축을 만들기 위해서는 이에 해당되는 또 하나의 축 객체를 만들어줘야만 한다는 사실이다. 이것이 바로 우리가 Object Graphics의 세계에서 부딪치게 될 기가 막힌 현실들 가운데 첫번째가 될 것이다.
Direct Graphics에서 단순히 plot 명령 하나만으로도 그림이 자동적으로 알아서 그려지던 것과 비교하면 상당히 불편하고 번거로운 방식이라 여겨지는 것은 당연하다. 나 역시 이 사실을 처음 알았을 당시 "이런 XX!"을 외쳤던 기억이 생생하다. 이렇게 Object Graphics에서는 우리가 Direct Graphics에서는 신경도 안썼을 아주 세부적인 사항들까지 일일이 다 신경써야 한다는 어려움이 따른다. 이러한 부분이 아무래도 Object Graphics가 어렵게 느껴지는 가장 주원인이 될 것이다. 나도 역시 지금도 이러한 부분이 어렵게 느껴지기는 마찬가지이다. 하지만 이것은 반드시 겪을 수 밖에 없는 것이며, 나중에 나올 멋진 그래픽 결과물을 생각하면서 이겨내야 할 부분이 아닌가 싶다.
어찌되었건 이렇게 생성된 객체는 좌측항에서 정의된 myAxis라는 이름을 갖는데, 조금 깊이 파고들어보면 이 객체가 메모리상에서 차지하고 있는 영역에 대한 이름표라고 보면 된다. 여기서 주목해야 할 사항은, 이렇게 생성된 객체가 바로 시스템의 메모리에 자리를 잡고 상주하게 된다는 사실이다. 이러한 영역을 전문용어로는 heap variable이라고 부른다. 그런데, 사용자가 인위적으로 이 객체를 제거하지 않으면 언제까지나 계속 상주하면서 메모리를 점유하게 된다는 점을 반드시 유념해야 한다. 만약 구현하고자 하는 그래픽이 많은 객체들을 필요로 할 경우, 필요없는 객체들을 적시에 제거해주지 않으면 예기치않은 시스템 자원 부족 사태가 벌어질 수도 있다. 증상이 심하지 않으면 동작이 무거워지고 느려지는 정도로 나타나겠지만, 심할 경우 메모리가 차서 다운이 되는 경우가 발생할 수도 있다. 따라서 Object Graphics에서는 생성된 객체들에 대한 효율적 관리가 필수적이며, 이를 염두에 둔 객체 운용 전략이 필요하다는 점을 꼭 기억해두길 바란다. 이 세계에서 프로그래머에게 부여되는 책임감은 Direct Graphics에서 그냥 커피였다면 이 바닥은 TOP라고 보면 된다.
'IDL > Object Graphics' 카테고리의 다른 글
Object Graphics in IDL [06] (0) | 2010.08.25 |
---|---|
Object Graphics in IDL [05] (0) | 2010.08.20 |
Object Graphics in IDL [03] (0) | 2010.08.10 |
Object Graphics in IDL [02] (0) | 2010.08.04 |
Object Graphics in IDL [01] (0) | 2010.08.03 |