. 실행 취소

실행취소(Undo)란 직전에 실행한 편집을 취소하여 원래대로 되돌리는 행위이다. 재실행(Redo)이란 취소를 다시 취소하는 것이며 취소된 편집을 다시 실행하는 것이다. 예를 들어 오마니라고 잘못 입력했으면 이 동작을 취소하여 입력된 내용을 삭제할 수 있으며 삭제한 후 다시 재실행하여 오마니를 원래대로 입력해 넣을 수 있다.

실행취소 기능은 사용자의 실수를 보완하는 굉장히 편리한 기능이다. 지워서는 안될 문장을 지웠다거나 엉뚱한 위치로 이동하는 실수는 누구나 할 수 있다. 만약 실수로 지운 내용을 복구할 수 없다면 다시 입력할 수밖에 없는데 이는 엄청난 노동력 낭비는 물론이고 편집자를 짜증나게 만들어 가정 평화를 위협하게 될 것이다. 실행취소 기능은 편집 시간을 절약시켜 주며 또한 편집자의 심리 상태를 편안하게 유지 시켜 준다. 긴 문장을 지울 때 과연 정말로 지워도 되는지 고민할 필요가 없으며 일단 지워 놓고 생각해도 늦지 않다.

비주얼 스튜디오의 편집기도 완벽한 수준의 실행취소를 지원하며 여러분들도 이미 이 기능을 사용하고 있을 것이다. 소스를 아무리 복잡하게 수정했더라도 마음에 안 들면 언제든지 수정전의 원래 소스로 다시 돌아갈 수 있다. 만약 이 기능이 없다면 프로그래머는 잘못된 코드를 작성했을 때 원래 코드를 다시 생각해 내느라 굉장히 힘들어질 것이고 이런 상황에서는 코드를 함부로 수정해 볼 엄두가 나지 않을 것이며 결국 소심해져서 생산성이 떨어지게 된다.

이 기능은 사용자에게는 말로 표현하기 힘들 정도로 편리하지만 프로그램에게는 많은 부담을 안겨 준다. 하지만 워낙 좋은 기능이라 편집을 하는 대부분의 프로그램이 채용하고 있다. 워드프로세서류는 거의 완벽한 취소 기능을 제공하며 그래픽 편집 프로그램이나 워크시트도 이 기능을 지원한다. 심지어 메모장조차도 마지막 편집 동작 한 번은 취소할 수 있도록 하는데 비록 단 한 번이지만 그래도 꽤 쓸만하다.

실행취소의 개요는 아주 간단하다. 사용자가 문서를 편집할 때 모든 편집 동작을 기록해두었다가 취소 요청이 있을 때 기록을 거꾸로 실행하기만 하면 된다. 문자열을 삽입할 때 어느 위치에 어떤 문자열을 삽입했는지 기억해두었다가 취소시 삽입된 위치로 찾아가 문자열을 삭제하면 감쪽같이 원래대로 복구되는 것이다. 삭제할 때는 위치와 삭제된 문자열을 기억해두면 된다. 개요는 이렇게 간단하지만 구현은 만만치 않음을 직감적으로 느낄 수 있을 것이다.

한 번만 취소 가능해서는 효용성이 없으며 이론상 무한 번 취소가 가능해서 원래 파일을 열 때의 모습 그대로 돌아갈 수 있어야 한다. 그래서 모든 편집 동작을 처음부터 순서대로 일일이 기록해두어야 한다. , 캐럿을 이동시키는 동작과 선택 동작은 문서를 변경시키지 않는데다 수작업으로 되돌리기도 어렵지 않으므로 기록하지 않기로 한다. 모든 동작을 다 기록하려면 메모리 요구량은 실로 엄청날 것이며 문서 자체의 용량보다도 훨씬 더 큰 메모리를 요구한다. 메모리 사용량은 가급적이면 최소화해야 하며 또한 이 기능으로 인해 프로그램이 느려져서는 곤란하다.

기능 요구가 복잡하기 때문에 작성하기도 어렵고 작성된 코드를 이해하는 것도 쉽지 않다. Dangeun5 프로젝트를 만들어 놓고 차분히 같이 실습을 진행해 나가도록 하자. CD-ROM의 예제를 분석해 볼 수도 있겠지만 이 기능만큼은 난이도가 있으므로 반드시 따라 실습을 하면서 어떤 과정으로 기능이 만들어지는지 보기 바란다. 실습을 진행하기 전에 여러분이 직접 만들어야 하는 상황이라고 가정하고 어떤 식으로 구현할지 설계를 미리 해보는 것도 좋다.