문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판 | |||
| product:povice:framework:collection [2022-11-15 15:20] – 제거됨 - 바깥 편집 (Unknown date) 127.0.0.1 | product:povice:framework:collection [2022-11-15 15:20] (현재) – ↷ 문서가 product:povice:collection에서 product:povice:framework:collection(으)로 이동되었습니다 shincs | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ====== 컬렉션 ====== | ||
| + | |||
| + | Data Collection에서 사용 가능한 컬렉션의 종류를 설명합니다. | ||
| + | |||
| + | ===== 용어의 정의 ===== | ||
| + | |||
| + | 여기서는 필드와 속성을 모두 합쳐서 멤버(Member)라 정의합니다. 함수를 메서드라 부르고 List, Dictionary와 같은 데이터 형식을 컬렉션으로 부르기도 합니다. | ||
| + | |||
| + | ===== 계층 구조 ===== | ||
| + | |||
| + | 최상위 계층인 '' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <wrap fontsize_12> | ||
| + | |||
| + | ===== NotifyList< | ||
| + | |||
| + | NotifyList는 컬렉션에서 항목이 추가되거나 제거가 되었을 때 혹은, 항목의 값이 변경되었을 때 알림을 받을 수 있는 컬렉션입니다. | ||
| + | |||
| + | ==== 멤버(Member) ==== | ||
| + | |||
| + | * **this[int] : T** | ||
| + | * 지정한 인덱스에 있는 요소를 가져오거나 설정합니다. | ||
| + | * **Count : int** | ||
| + | * NotifyList< | ||
| + | * **InitInProgress : bool** | ||
| + | * ISupportInitialize 인터페이스에 의해 BeginInit() 메서드가 호출되었는지 여부를 가져옵니다. | ||
| + | * **ItemType : Type** | ||
| + | * 항목의 형식을 가져옵니다. | ||
| + | * **Members : MemberCollection** | ||
| + | * 정의한 형식 멤버들에 대한 컬렉션을 가져옵니다. | ||
| + | * **ReadOnly : bool** | ||
| + | * NotifyList< | ||
| + | |||
| + | ==== 메서드(Method) ==== | ||
| + | |||
| + | * **Add(T) : void** | ||
| + | * 개체를 NotifyList< | ||
| + | * **AddRange(IEnumerable< | ||
| + | * 지정된 컬렉션의 항목을 NotifyList< | ||
| + | * **ApplyRange(IEnumerable< | ||
| + | * 다시 적용하기위해 기존 항목들을 지우고 지정된 컬렉션의 항목을 NotifyList< | ||
| + | * **BeginInit() : void** | ||
| + | * 초기화가 시작됨을 개체에 알립니다. | ||
| + | * **Clear() : void** | ||
| + | * NotifyList< | ||
| + | * **Contains(T) : bool** | ||
| + | * NotifyList< | ||
| + | * **CreateItem(params object[]) : object** | ||
| + | * ItemType 속성값에 해당하는 형식을 생성합니다. | ||
| + | * **CopyTo(T[], | ||
| + | * 현재 1차원 배열의 모든 요소를 지정된 1차원 배열에 복사합니다. | ||
| + | * **EndInit() : void** | ||
| + | * 초기화가 완료됨을 개체에 알립니다. | ||
| + | * **GenerateCode() : string** | ||
| + | * 형식 정보를 사용하여 클래스 구현 코드를 생성합니다. | ||
| + | * **GetRange(int, | ||
| + | * 소스 NotifyList< | ||
| + | * **IndexOf(T) : int** | ||
| + | * NotifyList< | ||
| + | * **Insert(int, | ||
| + | * 항목을 NotifyList< | ||
| + | * **Remove(T) : bool** | ||
| + | * NotifyList< | ||
| + | * **RemoveAt(int) : void** | ||
| + | * NotifyList< | ||
| + | * **RemoveRange(int, | ||
| + | * NotifyList< | ||
| + | |||
| + | ==== 이벤트(Event) ==== | ||
| + | |||
| + | * **AsyncCollectionChanged : NotifyCollectionChangedEventHandler** | ||
| + | * 비동기로 컬렉션이 변경될 때 발생합니다. | ||
| + | * **CollectionChanged : NotifyCollectionChangedEventHandler** | ||
| + | * 컬렉션이 변경될 때 발생합니다. | ||
| + | * **ValueChanged : EventHandler< | ||
| + | * 멤버의 값이 변경되면 발생합니다. | ||
| + | |||
| + | === 이벤트 발생 조건 === | ||
| + | |||
| + | 기본적으로는 '' | ||
| + | |||
| + | * NotifyList< | ||
| + | * NotifyList.Members[i].SetValue() 메서드를 사용 할 것 | ||
| + | * 클래스 선언 시 INotifyValueChanged 인터페이스를 상속 받아 구현 할 것 | ||
| + | |||
| + | **NotifyList< | ||
| + | |||
| + | NotifyList< | ||
| + | |||
| + | <code csharp> | ||
| + | #region ClassName | ||
| + | /// < | ||
| + | /// 클래스를 정의합니다. | ||
| + | /// </ | ||
| + | public class ClassName | ||
| + | { | ||
| + | /// < | ||
| + | public long RegionID; | ||
| + | /// < | ||
| + | public string RegionDescription; | ||
| + | } | ||
| + | #endregion | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | **NotifyList.Members[i].SetValue() 메서드** | ||
| + | |||
| + | T 타입에 상관없이 SetValue() 메서드를 사용하면 ValueChanged 이벤트가 항상 발생합니다. | ||
| + | |||
| + | **INotifyValueChanged 인터페이스 상속** | ||
| + | |||
| + | 클래스를 선언할 때 INotifyValueChanged 인터페이스를 상속받고 속성 값이 변경될 때 ValueChanged 이벤트를 호출해주는 패턴을 구현합니다. 아래는 구현 방법입니다. | ||
| + | |||
| + | <code csharp> | ||
| + | /// < | ||
| + | /// INotifyValueChanged 인터페이스를 사용하는 예제입니다. | ||
| + | /// </ | ||
| + | public class TestClass : INotifyValueChanged | ||
| + | { | ||
| + | /// < | ||
| + | /// 멤버의 값이 변경될 때 발생합니다. | ||
| + | /// </ | ||
| + | public event EventHandler< | ||
| + | /// < | ||
| + | /// ID 값입니다. | ||
| + | /// </ | ||
| + | string id; | ||
| + | /// < | ||
| + | /// ID 값을 가져오거나 설정합니다. | ||
| + | /// </ | ||
| + | public string Id | ||
| + | { | ||
| + | get => this.id; | ||
| + | set | ||
| + | { | ||
| + | var oldValue = this.id; | ||
| + | this.id = value; | ||
| + | // 변경 후 이벤트를 호출합니다. | ||
| + | this.ValueChanged? | ||
| + | nameof(Id), value, oldValue)); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ==== LINQ 지원 ==== | ||
| + | |||
| + | 다음과 같이 LINQ 구문이 사용 가능합니다. | ||
| + | |||
| + | <code csharp> | ||
| + | var enumerable = from item in notifyList | ||
| + | where item.Category == " | ||
| + | | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ===== DataList< | ||
| + | |||
| + | '' | ||
| + | |||
| + | ==== 멤버(Member) ==== | ||
| + | |||
| + | * **this[int] : T** | ||
| + | * 지정한 인덱스에 있는 요소를 가져오거나 설정합니다. | ||
| + | * **Count : int** | ||
| + | * DataList< | ||
| + | * **Filters : FilterCollection** | ||
| + | * 필터의 컬렉션을 가져옵니다. 설정되지 않았을 경우 Count가 0입니다. | ||
| + | * **InitInProgress : bool** | ||
| + | * ISupportInitialize 인터페이스에 의해 BeginInit() 메서드가 호출되었는지 여부를 가져옵니다. | ||
| + | * **ItemType : Type** | ||
| + | * 항목의 형식을 가져옵니다. | ||
| + | * **Members : MemberCollection** | ||
| + | * 정의한 형식 멤버들에 대한 컬렉션을 가져옵니다. | ||
| + | * **ReadOnly : bool** | ||
| + | * DataList< | ||
| + | * **Sorts : SortCollection** | ||
| + | * 정렬의 컬렉션을 가져옵니다. 설정되지 않았을 경우 Count가 0입니다. | ||
| + | |||
| + | ==== 메서드(Method) ==== | ||
| + | |||
| + | * **Add(T) : void** | ||
| + | * 개체를 DataList< | ||
| + | * **AddRange(IEnumerable< | ||
| + | * 지정된 컬렉션의 항목을 DataList< | ||
| + | * **ApplyRange(IEnumerable< | ||
| + | * 다시 적용하기위해 기존 항목들을 지우고 지정된 컬렉션의 항목을 DataList< | ||
| + | * **BeginInit() : void** | ||
| + | * 초기화가 시작됨을 개체에 알립니다. | ||
| + | * **Clear() : void** | ||
| + | * DataList< | ||
| + | * **Contains(T) : bool** | ||
| + | * DataList< | ||
| + | * **CreateItem(params object[]) : object** | ||
| + | * ItemType 속성값에 해당하는 형식을 생성합니다. | ||
| + | * **CopyTo(T[], | ||
| + | * 현재 1차원 배열의 모든 요소를 지정된 1차원 배열에 복사합니다. | ||
| + | * **EndInit() : void** | ||
| + | * 초기화가 완료됨을 개체에 알립니다. | ||
| + | * **Find(string, | ||
| + | * 컬렉션에서 멤버 이름과 값이 일치하는 항목의 인덱스를 반환합니다. | ||
| + | * **GenerateCode() : string** | ||
| + | * 형식 정보를 사용하여 클래스 구현 코드를 생성합니다. | ||
| + | * **GetRange(int, | ||
| + | * 소스 DataList< | ||
| + | * **IndexOf(T) : int** | ||
| + | * DataList< | ||
| + | * **Insert(int, | ||
| + | * 항목을 DataList< | ||
| + | * **Remove(T) : bool** | ||
| + | * DataList< | ||
| + | * **RemoveAt(int) : void** | ||
| + | * DataList< | ||
| + | * **RemoveRange(int, | ||
| + | * DataList< | ||
| + | * **SetValue(object, | ||
| + | * 항목의 값을 변경합니다. 변경된 후에 ValueChanged 이벤트가 발생합니다. | ||
| + | |||
| + | ==== 이벤트(Event) ==== | ||
| + | |||
| + | * **AsyncCollectionChanged : NotifyCollectionChangedEventHandler** | ||
| + | * 비동기로 컬렉션이 변경될 때 발생합니다. | ||
| + | * **CollectionChanged : NotifyCollectionChangedEventHandler** | ||
| + | * 컬렉션이 변경될 때 발생합니다. | ||
| + | * **ValueChanged : EventHandler< | ||
| + | * 멤버의 값이 변경되면 발생합니다. | ||
| + | |||
| + | ==== 필터(Filter) ==== | ||
| + | |||
| + | 필터 기능을 위해 '' | ||
| + | |||
| + | <code csharp> | ||
| + | dataList.Filters.Add(" | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ==== 정렬(Sort) ==== | ||
| + | |||
| + | 정렬 기능을 위해 '' | ||
| + | |||
| + | <code csharp> | ||
| + | dataList.Sorts.Add(" | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ===== VirtualList< | ||
| + | |||
| + | 데이터베이스의 테이블의 항목이 추가 또는 제거되거나 전체 목록이 새로 고쳐질 때 알림을 제공하는 동적 데이터 컬렉션을 나타냅니다. VirtualList< | ||
| + | |||
| + | * 대용량 처리를 위해 데이터는 RDB에 적재하고 사용할 때는 필요한 부분만 가져옵니다. | ||
| + | * In-memory, Caching, Dynamic Query 최적화를 통해 기본 성능을 향상시킵니다. | ||
| + | * 전체 데이터를 검색할 경우 성능을 위해 foreach를 사용하여야 합니다. | ||
| + | |||
| + | **선언 방법** | ||
| + | |||
| + | 기본적인 선언 방법은 다음과 같습니다. | ||
| + | |||
| + | <code csharp> | ||
| + | var virtualList = new VirtualList< | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== 멤버(Member) ==== | ||
| + | |||
| + | * **this[int] : T** | ||
| + | * 지정한 인덱스에 있는 요소를 가져오거나 설정합니다. | ||
| + | * **ConnectionName : string** | ||
| + | * 연결 이름을 가져옵니다. | ||
| + | * **Count : int** | ||
| + | * VirtualList< | ||
| + | * **Filters : FilterCollection** | ||
| + | * 필터의 컬렉션을 가져옵니다. 설정되지 않았을 경우 Count가 0입니다. | ||
| + | * **InitInProgress : bool** | ||
| + | * ISupportInitialize 인터페이스에 의해 BeginInit() 메서드가 호출되었는지 여부를 가져옵니다. | ||
| + | * **ItemIdColumnName : string** | ||
| + | * 항목 ID 값을 가지는 컬럼 이름을 가져오거나 설정합니다. | ||
| + | * **ItemType : Type** | ||
| + | * 항목의 형식을 가져옵니다. | ||
| + | * **Members : MemberCollection** | ||
| + | * 정의한 형식 멤버들에 대한 컬렉션을 가져옵니다. | ||
| + | * **ReadOnly : bool** | ||
| + | * VirtualList< | ||
| + | * **Sorts : SortCollection** | ||
| + | * 정렬의 컬렉션을 가져옵니다. 설정되지 않았을 경우 Count가 0입니다. | ||
| + | * **TableName : string** | ||
| + | * 테이블 이름을 가져옵니다. | ||
| + | |||
| + | ==== 메서드(Method) ==== | ||
| + | |||
| + | * **Add(T) : void** | ||
| + | * 개체를 VirtualList< | ||
| + | * **AddRange(IEnumerable< | ||
| + | * 지정된 컬렉션의 항목을 VirtualList< | ||
| + | * **ApplyRange(IEnumerable< | ||
| + | * 다시 적용하기위해 기존 항목들을 지우고 지정된 컬렉션의 항목을 VirtualList< | ||
| + | * **BeginInit() : void** | ||
| + | * 초기화가 시작됨을 개체에 알립니다. | ||
| + | * **Clear() : void** | ||
| + | * DataList< | ||
| + | * **Contains(T) : bool** | ||
| + | * DataList< | ||
| + | * **CreateItem(params object[]) : object** | ||
| + | * ItemType 속성값에 해당하는 형식을 생성합니다. | ||
| + | * **CopyTo(T[], | ||
| + | * 현재 1차원 배열의 모든 요소를 지정된 1차원 배열에 복사합니다. | ||
| + | * **EndInit() : void** | ||
| + | * 초기화가 완료됨을 개체에 알립니다. | ||
| + | * **Find(string, | ||
| + | * 컬렉션에서 멤버 이름과 값이 일치하는 항목의 인덱스를 반환합니다. | ||
| + | * **GenerateCode() : string** | ||
| + | * 형식 정보를 사용하여 클래스 구현 코드를 생성합니다. | ||
| + | * **GetRange(int, | ||
| + | * 소스 VirtualList< | ||
| + | * **IndexOf(T) : int** | ||
| + | * VirtualList< | ||
| + | * **Remove(T) : bool** | ||
| + | * VirtualList< | ||
| + | * **RemoveAt(int) : void** | ||
| + | * VirtualList< | ||
| + | * **RemoveRange(int, | ||
| + | * VirtualList< | ||
| + | * **SetValue(object, | ||
| + | * 항목의 값을 변경합니다. 변경된 후에 ValueChanged 이벤트가 발생합니다. | ||
| + | |||
| + | ==== 이벤트(Event) ==== | ||
| + | |||
| + | * **AsyncCollectionChanged : NotifyCollectionChangedEventHandler** | ||
| + | * 비동기로 컬렉션이 변경될 때 발생합니다. | ||
| + | * **CollectionChanged : NotifyCollectionChangedEventHandler** | ||
| + | * 컬렉션이 변경될 때 발생합니다. | ||
| + | * **ValueChanged : EventHandler< | ||
| + | * 멤버의 값이 변경되면 발생합니다. | ||
| + | |||
| + | ==== 필터(Filter) ==== | ||
| + | |||
| + | 필터 기능을 위해 '' | ||
| + | |||
| + | <code csharp> | ||
| + | virtualList.Filters.Add(" | ||
| + | // 필터 적용 후 아래와 같이 실제 사용 시점에 쿼리 후 데이터를 가져옵니다. | ||
| + | var item = virtualList[2]; | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== 정렬(Sort) ==== | ||
| + | |||
| + | 정렬 기능을 위해 '' | ||
| + | |||
| + | <code csharp> | ||
| + | virtualList.Sorts.Add(" | ||
| + | // 정렬 적용 후 아래와 같이 실제 사용 시점에 쿼리 후 데이터를 가져옵니다. | ||
| + | var item = virtualList[2]; | ||
| + | |||
| + | </ | ||
| + | |||