Deep Copy... 과연 많이 해도 좋을지 모르겠습니다.
오전까지의 구현에서 얕은 복사를 하고 있었기 때문에 Undo, Redo를 해도
제대로 동작 하지 않았습니다.
그래서 UndoRedoManager가 관리 하는 history에 SymbolManager가 만들어 낸 memento를
넣을때 SymbolManager가 갖고 있는 멤버변수를 모두 Deep copy해야 한다는 결론이 나왔습니다.
일단, SymbolManager가 갖고 있는 멤버 변수들은 모두 colloection들로 모두 레퍼런스 변수를
담고 있습니다.
이 레퍼런스 변수는 DSymbol이라는 놈들인데요..(실제로는 DSymbol을 상속받은 것들이겠죠)
그림에 드려질 도형들입니다.
문제는 이 DSymbol안에 있는 것들도 상당한 양의 레퍼런스 변수를 담고 있어서 Deep Copy를 하면
시간과 메모리가 많이 들것 같습니다.
문제는 그것만이 아니더군요..
UndoRedoManager가 Undo, Redo 함수를 통해 memento를 리턴할때도 Deep Copy 를 해서 그것을 넘겨주어
야 했습니다.
그렇게 하지 않으면 SymbolManager가 그 값을 변경하면 history의 memento도 갖이 변경이
되니까요..
두가지 상황에서 많은 Deep copy가 일어 나고 있습니다.
마땅한 다른 해결책이 없어서 그대로 쓰지만 잘 봐야 할 점인 것 같습니다.
일단 오늘은, 특정 도형에 대해서만 Clone(Deep copy를 이용) 을 구현했습니다.
모두 구현 하고 최종 테스트는 내일이 될 것같습니다.
와우~~ 수고 했어!!!ㅋ