일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 알고리즘
- 소프트웨어공학
- 소프트웨어
- 사이버보안
- 빅데이터
- 데이터과학
- 인공지능
- 데이터베이스
- 자바스크립트
- I'm Sorry
- 머신러닝
- Yes
- 네트워크보안
- 딥러닝
- 컴퓨터비전
- 프로그래밍
- 보안
- 컴퓨터과학
- 버전관리
- 자료구조
- 컴퓨터공학
- 데이터분석
- springboot
- 디자인패턴
- 네트워크
- 클라우드컴퓨팅
- 프로그래밍언어
- 웹개발
- 데이터구조
- 파이썬
- Today
- Total
목록UndoRedo (5)
스택큐힙리스트
“되돌리기(Undo)”나 “기록/재실행(Redo·Macro)”가 필요할 때, 팀이 가장 많이 헷갈리는 두 패턴이 커맨드(Command)와 메멘토(Memento)죠. 결론부터 말할게요.작업 자체를 기록·재생하고 싶다면 → 커맨드객체 상태를 ‘그 순간’으로 즉시 되돌리고 싶다면 → 메멘토두 패턴은 겹치는 영역이 있지만 목표가 다릅니다. 커맨드는 “행위(요청)”를 객체로 만들고 큐잉·지연·원격 실행·로그·매크로까지 다룹니다. 메멘토는 “상태 스냅샷”을 캡슐화해 내부 구현을 노출하지 않고 저장·복원합니다.언제 커맨드가 맞나?이럴 때 커맨드가 덜 아픕니다.행위 중심으로 생각해야 할 때: “이 버튼이 누르면 어떤 작업을 수행한다”를 깔끔히 객체화.큐·지연·원격 실행이 필요할 때(잡 큐, 워커, 재시도).Audit/..
복잡한 편집기나 결제 플로우에서 “방금 전으로 돌아가줘”는 거의 필수 기능이죠. 이걸 매번 if/else로 땜빵하다 보면 상태 관리가 산으로 갑니다. 메멘토 패턴은 객체의 내부 구현을 까지 않고(캡슐화 유지) 이전 상태 스냅샷을 저장·복원하게 해 주는 정석 해법이에요.왜 메멘토인가? (문제 → 해법)문제: 객체가 복잡해질수록 “원래대로” 돌리는 로직이 여기저기 흩어짐 → 사이드이펙트·버그 증가해법: 현재 상태를 Memento(스냅샷) 로 외부에 맡겨 두고, 필요할 때 Originator 가 그 스냅샷으로 복원. 스냅샷 묶음은 Caretaker 가 관리. 구조가 단순하고 테스트가 쉬워집니다.구성 요소 한 번에 이해하기Originator: “상태 주인공”. 스냅샷을 만들고(save()), 나중에 되돌리는(r..
복잡한 앱을 만들다 보면 “방금 전 상태로 돌려줘!” 라는 요구가 꼭 생깁니다. 편집기에서의 Undo/Redo, 게임의 저장·로드, 그리고 상태 머신에서 특정 단계로 롤백 하기까지—모두 객체의 이전 상태를 안전하게 보관-복원하는 Memento 패턴으로 해결할 수 있습니다.Memento는 캡슐화를 깨지 않고 객체의 스냅샷을 외부에 보관했다가 원할 때 정확히 그 상태로 되돌리는 행위(Behavioral) 패턴입니다.언제, 왜 써야 할까?상태 머신 롤백: 복잡한 워크플로에서 오류가 나면 직전 단계로 안전하게 복귀.알림 시스템 취소: 푸시 예약을 “1분 안에 취소” 하도록 임시 스냅샷 보관.에디터 Undo/Redo: 사용자가 편집할 때마다 스냅샷을 스택에 쌓았다가 단계별 복원.핵심은 “상태 이력” 을 Care..
왜 또 커맨드 패턴인가?버튼 하나에 기능을 자꾸 갈아끼워야 할 때마다 if-else 덩어리를 늘리는 대신, “명령 자체를 객체로 포장”하면 된다. 요청(함수 이름·인자·수행 시점)을 통째로 캡슐화해 큐에 쌓거나, 로그로 남기거나, 실행 ↔ 취소까지 자유자재로 다룰 수 있다는 얘기다. 국내 인기 블로그들도 “요청을 객체로 만들어 느슨한 결합을 얻는다”는 점을 1순위 장점으로 꼽는다.패턴 한 줄 정의Invoker(요청자)가 Command(명령 객체)를 실행하면, 명령은 Receiver(실제 작업자)에게 일을 시킨다.Invoker는 “누가 어떻게 일하느냐”에 전혀 관여하지 않는다. 때문에 실행 시점 지연, 일괄 처리, undo/redo, 트랜잭션 롤백 같은 고급 기능을 끼워 넣기 쉽다.핵심 구성 요소Comma..