. 두 방법의 비교

선택을 만들고 보여주는 두 가지 방법에 대해 알아 보았는데 이 두 방법 외에도 다양한 선택 방법이 있음은 물론이다. 여러분들은 두 방법 중 어떤 것이 더 마음에 드는가? 속도상으로는 분명히 반전 선택법이 유리하고 화면 처리에 있어서도 반전 선택법이 훨씬 더 깔끔하다. 게다가 DrawLine이나 DrawSegment 같은 함수들이 수정될 필요가 없기 때문에 선택 자체만으로 본다면 훨씬 더 간단하고 쉽다.

하지만 이 방법을 잘못 사용하면 반전 블록의 잔상이 남는 경우가 많기 때문에 프로그램의 특수한 상황을 잘 다루어야 한다. 예를 들어 ApiEdit의 경우 bLineEnd를 잘못 관리하면 잔상이 남게 되는데 선택했을 때와 선택을 해제할 때의 리전이 항상 같도록 신경써야 한다. 무엇보다 선택영역이 바뀐다고 해서 화면을 다시 그리지 않는다는 점이 큰 장점이며 그래서 선택의 확장, 축소 속도가 대단히 빠르다. 속도가 빠르다는 것은 곧 요구되는 컴퓨터 성능이 낮아도 상관없다는 뜻이다.

반전 선택법의 단점이라면 멋이 없다는 것이다. 아니, 멋이 없다기보다는 멋을 부려볼 수 있는 여지가 없다. 반전이라는 연산이 단순히 비트를 뒤집는 것이기 때문에 선택되어 있다는 것을 보여줄 수만 있을 뿐이지 어떠한 장식을 하기에는 부족하다. 게임 프로그램에서 캐릭터를 선택했는데 이 캐릭터가 반전되어 보인다면 별로 보기에 좋지 않을 것이다. 선택의 모양 자체가 크게 중요하지 않을 때만 이 방법을 사용할 수 있다.

다시 그리기 방법은 선택에 필요한 코드가 조금 작고 리전 객체를 사용하지 않으므로 리소스 사용량이 적다는 장점이 있다. 또한 직접 선택영역을 그리기 때문에 블록의 색상이나 모양에 대해 개입할 수 있는 여지가 많고 화면을 예쁘게 장식할 수 있다. 하지만 선택이 바뀔 때마다 화면을 다시 그려야 한다는 것은 큰 부담이 되는데 CAD 3D 그래픽 프로그램같이 다시 그리는데 시간이 많이 드는 프로그램에서는 쓰기 어렵다. 또한 마우스 이동시마다 화면을 다시 그려야 하므로 깜박임이 심한 것도 단점이다.

두 방법 중 어떤 방법을 사용할 것인가는 프로그램의 목적과 상황에 따라 많이 달라지게 될 것이다. 어떤 경우는 반전 선택법으로도 충분하고 어떤 경우는 다시 그리는 것이 훨씬 더 좋은 결과를 가져올 수도 있다. ApiEdit는 최초 반전 선택법으로 작성되었다가 다시 그리는 방법으로 정책을 수정했다.

왜냐하면 다시 그리는 방법이 훨씬 더 다양한 기교를 부릴 수 있기 때문이다. 현재 버전에서는 다시 그리는 방법이 굉장히 느리고 화면이 심하게 깜박거려 보기에 무척 거슬리지만 이 문제들은 조만간에 다른 방법으로 해결할 수 있으므로 선택영역을 직접 그려도 큰 문제가 되지 않는다고 판단하였다.