윈도우즈 프로그래밍을 해보셨던 분이라면 GDI라는 것은 한 번쯤 들어보셨을 겁니다. 바로 Graphics Device Interface의 준말입니다. 단어 그대로 Graphic에 관련된 루틴들이 들어있는 부분이죠. 그런데 사실 이 GDI라는 것이 속도는 무척 빠른게 맞지만, 보기보다 사용하기엔 엄청 불편합니다. 왜냐구요??
보시다시피 단순한 펜 하나를 그리려고 해도 실질적으로 불편한 점이 엄청 많습니다. 객체를 빌려오고, 반환하고, 이런 코드 치고 싶을리는 없을겁니다.
대신 GDI+ 이러한 GDI 개체들을 Class Wrapping 하여서 엄청 편하고, 이해하기도 쉽다는 장점이 있습니다. 다만 트레이드 오프라고 대신 단점이 없을 수는 없죠. 단점은 속도가 GDI에 비해서는 속도가 약간 느립니다. 하지만 요새 컴퓨터 속도에 따라서는 감수할 수 있을 정도의 속도감소이기 때문에 괜찮다고 생각이 듭니다.
사각형을 그리는 비슷한 역할의 코드임에도 불구하고, 무척 간단한 코드로 변하게 됩니다. 사실 보기만 해도 편하지 않나요?? 그런데 GDI+에도 한가지 보시면 불편하다? 라고 느낄 수 있는 부분이 있습니다.
대표적으로 Image 클래스의 경우 FromFile같은 경우 메모리 해제를 따로 해주어야 하는 점이 존재합니다. 그래서 delete 로 개체를 삭제해야 하는 점이 존재하죠. C++ 에서 아시다시피 delete 라는 게 필요하다면 코드 실행 도중의 예외로 인한 catch 라던가 그런 부분쪽에 delete 코드를 모두 넣어 주어야한다는 점이 존재하죠. 그렇게 되면 코드가 무척 지저분해 집니다.
만약 boost 에 존재하고, C++ 새 표준에 추가된 TR1의 smart pointer를 사용해보면 어떨까요? 리소스를 어차피 객체화 할거면 이름 그대로의 영리한 Pointer를 사용하여 삭제가 될 수 있으니 코드도 지저분해지지 않는 일석이조의 효과를 누릴 수 있겠죠.
물론 거의 기본 클래스로 알고 시작하는 smart pointer다 보니 대부분 알고 계실것 같지만, 아닌 분도 있고 그냥 기록 해두는 의미도 있고 해서 올렸는데. 나쁘지는 않겠죠^^? 그럼 오늘도 즐거운 하루 되세요~
"Programming Tip" 분류의 다른 글
| OpenMP 라고 아십니까?? (0) | 2008/07/27 |
| 심심해서 구현해본 그래픽 요소 (0) | 2008/07/03 |
| Child Window Mouse Message 문제. (0) | 2008/07/01 |
| 버퍼 오버플로우, 오버런이란?? (0) | 2008/04/27 |
| Com Library in C++ Builder - C++ 빌더에서 Com 라이브러리, .Net라이브러... (0) | 2008/03/29 |


댓글을 달아 주세요