요즘 대부분의 프로그램에서 Undo, Redo 기능을 지원하고 있습니다. 고객사에서 Undo 기능이 제대로 동작하지 않는다고 오류 접수를 해서 코드를 확인해 보니 아래와 같이 되어 있었습니다. public class UndoRedoData { /// 현재 화면에 보이는 아이템의 레퍼런스 public CommentUserInfo Item { get; set; } /// 아래는 Undo, Redo를 하기 위한 속성들 public List<Point> PointSet { get; set; } public double LineSize { get; set; } public DoubleCollection DashSize { get; set; } public Double Opacity { get; set; } public Controls.Common.PaintSet paint { get; set; } public double Angle { get; set; } } 이 코드를 보는 순간 '잘못 되었구나'라는 생각이 들었습니다. Item 속성 밑에 있는 것들은 모두 CommentUserInfo 클래스의 속성들 중 일부였습니다. 아마도 이 코드를 작성한 개발자는 Undo, Redo 기능을 개발하면서 필요한 속성들을 그때 그때 추가한 것 같았습니다. 'LineSize는 적용되는데 DashSize는 적용 안되네'하고 DashSize를 추가하고 마찬가지로 Opacity, Angle도 그렇게 추가한 것 같았습니다. 나중에 추가 기능이 필요해서 CommentUserInfo에 속성을 추가하면 UndoRedoData에도 속성을 추가해야 합니다. 관리해야 할 지점이 2군데가 되고 그만큼 버그가 발생할 확률도 높아집니다. 이런 식의 작업은 계속 속성들을 추가할 것이고 결국에는 CommentUserInfo와 같아질 것입니다. 따라서 UndoRedoData에 ...