ObservableCollection에 대해서
데이터 변경을 감지해서 처리해주는 로직에서 매 프레임마다 확인하는 건 비용이 비싸기 때문에
Observer 패턴을 사용해서 관심 있는 데이터가 해당 이벤트를 구독하는 방식을 많이 사용한다.
나는 ObservableData 클래스를 Generic 형식으로 작성해서 사용하고 있었는데
Collection에 Observer 패턴을 적용하고자 했으나 생각보다 고려해야 될 점이 많아 보류해두었다.
그래서 msdn을 확인하니 System.Collection.ObjectModel 네임스페이스에 ObservableCollection이 구현돼 있어 사용해보았다.
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class Database {
public ObservableCollection<int> list = new ObservableCollection<int>();
}
public class Test() {
public static void Main() {
var db=new Database();
db.list.CollectionChanged += (sender,args) => {
if (args.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Add) {
//Added (args.NewItems[args.NewItems.Count - 1])
}
if(args.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) {
//Removed
}
}
}
}
일단 검증된 Class 있다는건 반가웠지만 주로 Add,Remove에 대해서 Listening하기 위해서 사용될텐데
그 때문에 위와 같은 코드를 작성하는건 효율성도 떨어지고 직관적이지도 않은 것 같아
해당 클래스를 참조하여 간소화된 ObservableList와 ObservableDictionary를 작성할 예정이다.
'C# > Story' 카테고리의 다른 글
2차원 배열과 Matrix Class 제작 (0) | 2019.09.23 |
---|---|
yield 문과 Iterator에 대해서 (0) | 2019.09.16 |