실행 취소
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
실행 취소는 컴퓨터 명령을 되돌리는 기능으로, 1968년 FRESS에서 처음 구현된 이후 텍스트 편집기, 운영체제 등 다양한 소프트웨어에 적용되었다. 초기에는 단일 실행 취소 기능이 제공되었으나, 1980년대부터 여러 단계를 되돌릴 수 있는 다단계 실행 취소 기능이 등장했다. 실행 취소 모델은 선형과 비선형으로 나뉘며, 선형 모델은 스택 구조를, 비선형 모델은 스크립트, US&R, 삼위, 선택적 실행 취소 등의 방식을 사용한다. 실행 취소 기능은 명령 패턴과 메멘토 패턴을 통해 구현될 수 있으며, 전체 체크포인트, 완전 재실행, 부분 체크포인트, 역함수 등의 전략을 활용하여 역 연산을 구현한다.
더 읽어볼만한 페이지
- 1968년 도입 - 비전 (마블 코믹스)
마블 코믹스의 슈퍼히어로 비전은 울트론에 의해 창조된 안드로이드로, 어벤져스에 합류하여 스칼렛 위치와의 로맨스를 통해 인간적인 면모를 보여주며 다양한 미디어에 등장한다. - 1968년 도입 - PDP-10
PDP-10은 디지털 이큅먼트 코퍼레이션에서 개발한 36비트 명령어 집합 아키텍처를 가진 컴퓨터 시스템으로, 다양한 모델과 운영체제를 지원하며 시분할 시스템 구축 및 해커 문화, 초기 컴퓨터 게임 개발에 영향을 미쳤으나 VAX 시스템 전략으로 인해 단종되었다. - 문서 편집기 기능 - 전문 검색
전문 검색은 문서 내 특정 단어나 구절을 찾는 정보 검색의 핵심 기술로, 인덱싱, 페이지랭크 알고리즘, 문자열 추출 방법, 문서 필터 기술, 질의 도구 개선 등을 통해 발전해왔으며, 웹 검색, 기업용 검색, 데스크톱 검색 등 다양한 분야에서 활용된다. - 문서 편집기 기능 - 맞춤법 검사기
맞춤법 검사기는 텍스트의 오타와 문법 오류를 검사하여 수정 제안을 제공하는 소프트웨어 도구이며, 1970년대에 처음 등장하여 기술 발전을 거쳐 현재 다양한 플랫폼에서 여러 언어를 지원한다.
| 실행 취소 |
|---|
2. 역사
컴퓨터 명령 실행 취소 기능은 컴퓨터 사용 방식의 변화에 따라 여러 차례 독립적으로 발명되었다.[15]
2. 1. 초기 개발
컴퓨터 명령 실행 취소 기능은 사람들이 컴퓨터를 사용하는 방식에 대한 반응으로 여러 차례 독립적으로 발명되었다.[15]1968년 브라운 대학교에서 개발된 FRESS(File Retrieval and Editing System)는 실행 취소 기능을 구현한 최초의 컴퓨터 기반 시스템으로 알려져 있다.[16][17]
워렌 테이텔만은 1971년까지 BBN-LISP의 일부로 실행 취소 기능을 갖춘 '프로그래머 보조'를 개발했다.[7]
Xerox PARC의 브라보 텍스트 편집기에는 1974년에 실행 취소 명령이 있었다.[8]
2. 2. 실행 취소 기능의 확산
1976년, IBM의 랜스 A. 밀러와 존 C. 토마스는 연구 보고서에서 사용자 인터페이스에서 실행 취소 기능의 중요성을 강조했다.[9] 이들은 사용자가 적어도 바로 앞선 명령을 '취소'할 수 있도록 하는 것이 매우 유용할 것이라고 언급했다.[10] Xerox PARC 연구원들은 실행 취소 명령에 키보드 단축키 Ctrl-Z를 할당했으며, 이는 개인용 컴퓨터 시대의 텍스트 편집기 및 워드 프로세서의 중요한 기능이 되었다.[11]1980년, Xerox PARC의 래리 테슬러는 애플 컴퓨터에서 근무하기 시작했다. 그곳에서 그는 빌 앳킨슨과 함께 Apple Lisa에서 실행 취소 명령을 표준 기능으로 포함할 것을 옹호했다. 앳킨슨은 Lisa의 응용 프로그램 소프트웨어 개발자들을 설득하여 단일 수준의 실행 취소 및 다시 실행을 포함하도록 했지만, 여러 수준을 위한 로비에는 실패했다. 애플은 Lisa의 후속 제품인 Macintosh를 출시했을 때 모든 표준 응용 프로그램에 "편집" 메뉴의 첫 번째 명령으로 "실행 취소"를 포함하도록 규정했으며,[12] 이는 오늘날까지 macOS와 Windows에서 표준으로 유지되고 있다.
2. 3. 다단계 실행 취소
1980년대에는 다단계 실행 취소 기능이 도입되어 사용자가 가장 최근의 작업뿐만 아니라 일련의 작업을 취소할 수 있게 되었다.[11] EMACS 및 기타 시분할 화면 편집기는 개인용 컴퓨터 소프트웨어보다 먼저 이를 갖추었다. CygnusEd는 무제한 실행 취소/다시 실행 기능을 갖춘 최초의 Amiga 텍스트 편집기였다. 1982년에 출시된 워드 프로세싱 응용 프로그램인 AtariWriter는 실행 취소 기능을 제공했다. 1984년 NewStar에서 출시한 또 다른 워드 프로세싱 프로그램인 NewWord에도 실행 취소 명령이 있었다.[11] IBM의 VisiWord에도 삭제 취소 명령이 있었다.3. 실행 취소 및 다시 실행 모델
실행 취소 모델은 크게 선형과 비선형으로 분류된다. 실행 취소 및 다시 실행 모델의 일반적인 속성은 다음과 같다.
- 안정적인 실행 속성: 상태는 명령의 정렬된 목록으로 표현된다. 이는 명령이 "원래 실행 후 도달한 상태에서 항상 취소된다"는 것을 의미한다.[3]
- 약화된 안정적인 실행: 취소가 실행되면 취소된 명령에 의존하는 모든 명령이 해당 명령에 따라 취소됨을 의미한다.
- 안정적인 결과 속성: 정렬된 명령 목록에 명령뿐만 아니라 실행된 명령도 포함된다는 점을 제외하면 ''안정적인 실행 속성''과 유사하다.
- 교환 가능: 서로 다른 두 명령을 취소 및 다시 실행한 후 도달한 상태가 반대 순서로 실행될 때 동일함을 의미한다.
- 최소 취소 속성: "명령 C의 취소 작업은 명령 C와 C에 의존하는 C보다 젊은 모든 명령만 취소한다"고 설명한다.[3]
| 모델 | 설명 | 세부 모델 |
|---|---|---|
| 선형 실행 취소 | 실행된 모든 명령의 기록을 스택으로 구현한다. | 제한된 선형 모델 |
| 비선형 실행 취소 | 사용자가 실행된 명령을 임의의 순서로 실행 취소할 수 있게 해준다.[1] | 스크립트 모델, US&R 모델, 삼위 모델, 선택적 실행 취소 |
3. 1. 선형 실행 취소
선형 실행 취소는 실행된 모든 명령의 기록을 스택(후입선출(LIFO) 자료 구조)으로 구현한다. 새 명령이 실행되면 스택의 맨 위에 추가된다. 따라서 마지막으로 실행된 명령만 실행 취소하고 기록에서 제거할 수 있으며, 기록이 비어 있지 않는 한 실행 취소는 반복될 수 있다.[1]3. 1. 1. 제한된 선형 모델
제한된 선형 모델은 선형 실행 취소 모델에 몇 가지 제한을 추가한 모델이다. 이 모델은 기록 목록에 다른 명령이 있는 동안 명령이 실행되면 ''안정적인 실행 속성''을 유지하지 않는다.[1] 안정적인 실행 속성이란 상태가 명령의 정렬된 목록으로 표현될 때, 명령이 "원래 실행 후 도달한 상태에서 항상 취소된다"는 것을 의미한다.[3]제한된 선형 모델은 새로운 명령을 추가하기 전에 기록 목록을 지우는 방식 등으로 동작한다. 다른 제한 방법으로는 기록 목록의 크기를 제한하거나, 정의된 크기에 도달하면 첫 번째로 실행된 명령을 목록에서 삭제하는 방식 등이 있다.[1]
3. 2. 비선형 실행 취소
비선형 실행 취소는 사용자가 실행된 명령을 임의의 순서로 실행 취소할 수 있게 해준다.[1] 사용자는 가장 최근에 실행된 명령뿐만 아니라 목록에서 명령을 선택하여 실행 취소할 수 있다.[3] 비선형 취소 모델에는 스크립트 모델, US&R 모델, 삼위 모델, 선택적 취소가 있다.[1]비선형 실행 취소 모델의 일반적인 속성은 다음과 같다:
- 안정적인 실행 속성: 상태는 명령의 정렬된 목록으로 표현된다. 이는 명령이 "원래 실행 후 도달한 상태에서 항상 취소된다"는 것을 의미한다.[3]
- 약화된 안정적인 실행: 취소가 실행되면 취소된 명령에 의존하는 모든 명령이 해당 명령에 따라 취소된다.
- 안정적인 결과 속성: 정렬된 명령 목록에 명령뿐만 아니라 실행된 명령도 포함된다는 점을 제외하면 ''안정적인 실행 속성''과 유사하다.
- 교환 가능: 서로 다른 두 명령을 취소 및 다시 실행한 후 도달한 상태가 반대 순서로 실행될 때 동일하다.
- 최소 취소 속성: "명령 C의 취소 작업은 명령 C와 C에 의존하는 C보다 젊은 모든 명령만 취소한다"고 설명한다.[3]
3. 2. 1. 스크립트 모델
스크립트 모델은 사용자 작업을 명령 스크립트 편집으로 처리한다. 실행된 명령의 히스토리 목록은 "스크립트로 해석되며, 실행 취소의 효과는 실행 취소된 작업이 처음부터 발생하지 않은 것과 동일하게 정의"된다.[1] 실행 취소의 결과로, 상태는 실행 취소된 명령이 실행되지 않은 것과 같아야 한다. 이 모델의 단점은 사용자가 실행 취소된 명령과 현재 상태 간의 관계를 알아야 부작용을 피할 수 있다는 것이다. 이러한 부작용 중 하나는 중복이다. 또 다른 문제는 "직접 조작 인터페이스에서 후속 명령이 원래 실행되었던 상태와 다른 상태에서 다시 실행될 경우, 원래 사용자 작업의 이러한 재해석이 항상 명확하거나 잘 정의되지 않는다"는 것이다.[1]3. 2. 2. US&R 모델
US&R 모델의 특별한 기능은 명령을 건너뛸 수 있는 옵션이 있다는 것이다. 이는 명령을 다시 실행하는 것을 건너뛸 수 있음을 의미한다. 건너뛴 명령은 삭제되지 않고 건너뛴 것으로 표시된다.[1] 새로운 명령이 실행되면 기록 목록이 유지되므로 실행된 명령의 순서를 재현할 수 있다. 이 순서는 방향 그래프인 기록 트리를 통해 설명할 수 있는데, "다른 분기에서 명령을 다시 실행하여 그래프에 링크를 만들 수 있기 때문"이다.[1] 명령 집합이 단순하고 이해하기 쉽더라도, 건너뛰기와 분기 연결을 포함한 복잡한 구조는 사용자가 한 단계 이상 되돌리기를 원할 때 이해하고 기억하기 어렵다.[1]3. 2. 3. 삼위 모델 (Triadic Model)
삼위 모델은 실행 취소 및 다시 실행 외에도 회전 기능을 갖추고 있다.[1] 이 모델은 기록 목록과 다시 실행 작업을 포함하는 분리된 다시 실행 목록을 사용한다. 회전 작업은 다시 실행 목록의 마지막 명령을 목록 앞으로 이동시킨다.[1] 이는 다음에 다시 실행할 명령을 선택할 수 있게 하고, "다음 실행 취소 작업이 명령을 배치할 다시 실행 목록의 위치를 선택"할 수 있게 한다.[1] 따라서 다시 실행 목록은 정렬되지 않는다. 격리된 명령을 실행 취소하려면 여러 단계를 실행 취소하고, 다시 실행 목록을 회전시킨 다음, 여러 단계를 다시 실행해야 한다.[1] 다시 실행하려면 원하는 명령이 맨 위에 올 때까지 목록을 회전시켜야 한다.3. 2. 4. 선택적 실행 취소 (Selective Undo)
선택적 실행 취소는 기록 버퍼에서 실행된 모든 동작을 실행 취소할 수 있게 해준다. 실행 취소되는 동작과 독립적인 동작은 그대로 유지된다.[3] 실행 취소된 모든 명령에 대해 다시 실행하는 것도 가능하다. 선택적 실행 취소의 세 번째 기능은 "사용자의 직접적인 요청 없이는 어떤 명령도 기록 버퍼에서 자동으로 삭제될 수 없다"는 것이다.[3]선택적 실행 취소에서는 실행 취소와 다시 실행이 어떤 컨텍스트 외부에서도 실행 가능하다는 점이 적용된다. 여기에는 세 가지 주요 문제가 있다. 첫째, 실행 취소된 명령이 원래 컨텍스트 외부에 있을 수 있어 잘못된 참조가 발생할 수 있다. 둘째, 수정된 명령이 실행 취소될 수 있으므로 실행 취소 후 어떤 상태를 표시할지 해결해야 한다. 셋째, 명령 삭제 문제인데, 선택적 실행 취소에는 목록에 포인터가 없으므로 스택에서 어떤 명령도 삭제되어서는 안 된다.[3]
3. 3. 다중 사용자 응용 프로그램 (Multiuser Application)
여러 사용자가 동일한 문서를 동시에 편집할 수 있는 경우, 다중 사용자 실행 취소 기능이 필요하다.[13] ''전역'' 다중 사용자 실행 취소는 누가 편집했는지에 관계없이 문서에 대한 가장 최근의 작업을 되돌린다.[13] ''로컬'' 다중 사용자 실행 취소는 로컬 사용자가 수행한 작업만 되돌리며, 이는 비선형 실행 취소 구현이 필요하다.[13]4. 실행 취소 구현
실행 취소는 여러 디자인 패턴을 통해 구현할 수 있다. 가장 일반적인 패턴으로는 명령 패턴과 메멘토 패턴이 있다.
4. 1. 명령 패턴 (Command Pattern)
명령 패턴은 소프트웨어 디자인 패턴 중 하나로, 연산에 대한 정보를 명령 객체로 캡슐화한다. 모든 액션은 객체에 저장된다. 추상 명령 클래스는 추상 실행 연산을 구현하므로, 모든 명령 객체는 실행 연산을 갖는다. 실행 취소를 위해서는 실행된 명령의 효과를 되돌리는 실행 취소 연산도 있어야 하며, 이는 히스토리 목록에 저장된다. 실행 취소 및 다시 실행은 실행 또는 실행 취소 명령이 호출될 때 목록이 순방향 및 역방향으로 실행되도록 구현된다.[14]단일 실행 취소는 실행된 명령만 저장한다. 다단계 실행 취소는 명령이 포함된 히스토리 목록뿐만 아니라 목록의 최대 길이인 실행 취소 수준의 수도 저장한다.[14]
4. 2. 메멘토 패턴 (Memento Pattern)
메멘토 패턴을 사용하면 객체의 내부 상태를 저장할 수 있다. 상태가 저장되는 객체를 메멘토라고 부르며, 메멘토는 오리진에 의해 관리된다. 오리진은 실행 취소 시 현재 상태 정보를 담아 초기화된 메멘토를 반환하므로 상태를 확인할 수 있다. 메멘토는 오리진에서만 볼 수 있다.메멘토 패턴에서 실행 취소 메커니즘을 관리자라고 한다. 관리자는 메멘토를 안전하게 보관하는 역할을 하지만, 메멘토의 내용을 변경하지 않는다. 실행 취소를 위해 관리자는 오리진에게 메멘토를 요청한 다음, 실행 취소를 적용한다.[14]
4. 3. 실행 취소 메커니즘 구현 전략
메멘토 패턴에서 실행 취소 메커니즘은 관리자에 의해 구현된다. 관리자는 메멘토를 안전하게 보관하지만, 내용은 변경하지 않는다. 실행 취소를 위해 관리자는 오리진에게 메멘토를 요청하고, 실행 취소를 적용한다.[14]실행 취소 메커니즘은 대부분 특정 애플리케이션이나 명령 클래스에 종속되지 않고 구현될 수 있다. 여기에는 히스토리 목록 관리, 히스토리 스크롤러, 실행 취소 및 다시 실행 메뉴 항목, 다음 사용 가능한 명령의 이름에 따라 메뉴 항목 업데이트 등이 포함된다.[1]
모든 명령 클래스는 명령이 실행될 때 호출되는 `do` 메서드를 가지며, `undo` 메서드는 `do` 메서드의 역 연산을 구현한다. 역 연산을 구현하기 위한 전략은 다음과 같다.
- '''전체 체크포인트''': 명령 실행 후 전체 상태를 저장한다. 구현이 쉽지만 효율성이 낮아 자주 사용되지 않는다.
- '''완전 재실행''': 초기 상태를 저장하고 "초기 상태에서 시작하여 히스토리의 처음부터 모든 명령을 다시 실행"하여 히스토리 목록의 모든 상태에 도달한다.[1]
- '''부분 체크포인트''': 가장 많이 사용되는 전략이다. 변경된 애플리케이션 상태를 저장하고, 실행 취소를 통해 상태의 일부를 이전 값으로 되돌린다.
- '''역함수''': 저장된 상태 정보가 필요 없다. "예를 들어, 이동은 객체를 상대적인 양만큼 다시 이동시켜 되돌릴 수 있다."[1] 그러나 선택적 실행 취소의 경우 상태를 저장하기에 충분한 정보가 없다.
참조
[1]
논문
A selective undo mechanism for graphical user interfaces based on command objects
1994-09-01
[2]
서적
Proceedings of the SIGCHI conference on Human factors in computing systems common ground - CHI '96
ACM
1996-04-13
[3]
논문
Undo/Redo Operations in Complex Environments
2014
[4]
학위논문
Interactive Time
http://roger.ucsd.ed[...]
University of California, San Diego
2016-07-07
[5]
서적
Memory Machines: The Evolution of Hypertext
https://books.google[...]
Anthem Press
2014-12-01
[6]
논문
Crafting the User-Centered Document Interface: The Hypertext Editing System (HES) and the File Retrieval and Editing System (FRESS)
http://www.digitalhu[...]
2016-05-27
[7]
서적
Proceedings of the December 5-7, 1972, fall joint computer conference, Part II on - AFIPS '72 (Fall, part II)
ACM
1972-01-01
[8]
웹사이트
Bravo Manual in Alto Non-Programmers Guide, p. 52
http://history-compu[...]
2014-03-29
[9]
논문
Behavioral issues in the use of interactive systems
1977-09-01
[10]
웹사이트
Behavioral Issues in the Use of Interactive Systems
http://handle.dtic.m[...]
2011-05-21
[11]
웹사이트
The Age of Undoing
https://www.nytimes.[...]
2009-09-15
[12]
서적
Inside Macintosh, Volume I
1984
[13]
문서
Reflections on Undo
http://www.hcibook.c[...]
2006
[14]
서적
Design Patterns
Addison-Wesley
1995
[15]
학위논문
Interactive Time
http://roger.ucsd.ed[...]
University of California, San Diego
2018-03-06
[16]
서적
Memory Machines: The Evolution of Hypertext
https://books.google[...]
Anthem Press
2014-12-01
[17]
저널
Crafting the User-Centered Document Interface: The Hypertext Editing System (HES) and the File Retrieval and Editing System (FRESS)
http://www.digitalhu[...]
2010-01-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com