커맨드페턴 구글에 검색해봐도 그냥 undo redo 실행한 커맨드들 리스트에 넣는거던데 undo redo 핵심은 상태 관리잖음? 이전 상태로 되돌려야하는데 그럴거면 그냥 이전 상태랑 현재 상태 갖는 클래스 하나 만들고 스택으로 관리하는게 낫지않나
근데 그 상태의 크기가 엄청 크면 계속 카피 일어나는것도 엄청 비용 들텐데
잘 구현된 소스 어디 없나 무슨 system..out..println("네모 그린다") 이딴거밖에 안보이니까 뭘 배울수가없음
댓글 10
Immutable Object를 쓰면 간단하게 가능함 db반영이 문제지, 실시간으로 db에 반영되는 기능이 필요하다면 연산(command)을 스택에 저장해놓고 undo할때마다 대응되는 함수 실행하면댐, 예) createTodo: removeTodo
익명(118.33)2022-04-21 09:41
답글
DB반영이 유저 컨펌을 받는 형식이거나 없는 경우 너 말 처럼 불변개체를 갈아끼우는 방식 가능함
익명(118.33)2022-04-21 09:42
답글
글쿤.. 그럼 만약에 상태객체가 졸라 큰 경우는 어떻게 구현함? 연산이 +나 -면 반대로 수행하면 되는데 복잡하거나 되돌리기 힘든 연산인데 그게 크기가 큰 상태를 변경하면 이전 상태로 되돌릴때 어캐 최적화함??
익명(39.7)2022-04-21 09:44
답글
두 상태의 diff를 구해서 바뀐 부분만 바꿔주도록하는 방법이 있음 근데 이런건 이른 최적화할 경우 나중에 기능변경생기면 또 최적화해야하니 그건 나중에 하고 ㅇㅅㅇ
익명(118.33)2022-04-21 09:49
답글
그렇군.. 지식이 늘었다 고맙습니다..
익명(39.7)2022-04-21 09:50
답글
뭐 만드는데 undo redo 나오는거? 궁금 ㅇㅅㅇ..
포항의봄(bonnbonn)2022-04-21 10:23
답글
ㄴ 뭐 만드는거 아니야 아랫글 보고 궁금해서 물어봤어
익명(39.7)2022-04-21 12:02
행위가 발생하기 전 상태나 이후의 상태를 스냅샷 형태로 저장하는 건 비용이 큼. 니가 말한 대로 상태를 정의하는 프로퍼티가 다수인 경우인 경우가 문제임. 매 상태가 변화할 때마다 diff를 뜨는 것도 어떻게 보면 비용 문제가 있다. 변경하지 않는 상태까지 변경이 되었는지 확인해야 함. 상태 변경이 특정 커맨드에 의해서만 발생한다면 이걸 매회 diff 뜰 필요 없이 그냥 커맨드에서 변화하는 프로퍼티 값만 set해주는 걸로 커맨드 패턴형태로 redo, undo를 구현하면 됨.
troublecoder(troublecoder)2022-04-21 10:15
위에 형말대로 그냥 diff 떠서 스냅샷 구현할거면 언어에서 aop비슷하게 지원하는 놈이 있으면 그냥 한곳에 구현해놓고 조지면 뭐 구현은 쉬울것같긴하넹 - dc App
Immutable Object를 쓰면 간단하게 가능함 db반영이 문제지, 실시간으로 db에 반영되는 기능이 필요하다면 연산(command)을 스택에 저장해놓고 undo할때마다 대응되는 함수 실행하면댐, 예) createTodo: removeTodo
DB반영이 유저 컨펌을 받는 형식이거나 없는 경우 너 말 처럼 불변개체를 갈아끼우는 방식 가능함
글쿤.. 그럼 만약에 상태객체가 졸라 큰 경우는 어떻게 구현함? 연산이 +나 -면 반대로 수행하면 되는데 복잡하거나 되돌리기 힘든 연산인데 그게 크기가 큰 상태를 변경하면 이전 상태로 되돌릴때 어캐 최적화함??
두 상태의 diff를 구해서 바뀐 부분만 바꿔주도록하는 방법이 있음 근데 이런건 이른 최적화할 경우 나중에 기능변경생기면 또 최적화해야하니 그건 나중에 하고 ㅇㅅㅇ
그렇군.. 지식이 늘었다 고맙습니다..
뭐 만드는데 undo redo 나오는거? 궁금 ㅇㅅㅇ..
ㄴ 뭐 만드는거 아니야 아랫글 보고 궁금해서 물어봤어
행위가 발생하기 전 상태나 이후의 상태를 스냅샷 형태로 저장하는 건 비용이 큼. 니가 말한 대로 상태를 정의하는 프로퍼티가 다수인 경우인 경우가 문제임. 매 상태가 변화할 때마다 diff를 뜨는 것도 어떻게 보면 비용 문제가 있다. 변경하지 않는 상태까지 변경이 되었는지 확인해야 함. 상태 변경이 특정 커맨드에 의해서만 발생한다면 이걸 매회 diff 뜰 필요 없이 그냥 커맨드에서 변화하는 프로퍼티 값만 set해주는 걸로 커맨드 패턴형태로 redo, undo를 구현하면 됨.
위에 형말대로 그냥 diff 떠서 스냅샷 구현할거면 언어에서 aop비슷하게 지원하는 놈이 있으면 그냥 한곳에 구현해놓고 조지면 뭐 구현은 쉬울것같긴하넹 - dc App
감사감사감사