-
IEnumerable vs ObservableCollection개념 Self Study📝/C# 2024. 9. 20. 15:23
1. 개요
- 관리하는 프로그램에서 ItemSource를 바인딩하는 방식이 다양하게 구성되어있는 것을 알게되었다. 해당 클래스에 대해서 차이점을 파악해보고 그 과정에서 알게 된 것을 정리해보자
2. IEnumerable vs ICollection vs IList
- 해당 클래스들 내부에는 사용할 수 있는 메소드의 차이가 존재한다.
- IEnumerable: Collection의 요소들을 순회하고 싶을 때, read-only접근만 필요로 하고 foreach를 사용하고자 할때 주로 사용한다. 해당 클래스를 통해 선언을 한다면 View에서는 변경할 수 없으므로, 코드 복잡성이 추가된다.
- ICollection: Collection의 변화가 용이하고 size를 알고자 할때 주로 사용한다.
- IList: Collection의 요소들의 순서와 위치를 관리하고, collection을 변형하고 싶을때 사용한다.
- *List 자체가 유연하기 때문에 변형에 자유롭다.
메서드 관계별 다이어그램 3. IEnumerable vs List
제네릭을 통해 변수를 선언해줄때 List와 IEnumerable은 둘다 사용이 가능하지만 용도에 따라서 다르게 선언한다.
public void Show(IEnumerable<string> command){} //정상 작동 public void Show(List<string> command){} //정상 작동
IEnumerable의 특성
- 읽기 전용: 데이터를 순차적으로 읽기만 가능하며, 추가, 삭제, 수정 등의 작업이 불가하다.
- 지연 실행: 데이터를 실제로 필요한 시점에 하나씩 가져오기 때문에, 대량의 데이터를 처리할 때 메모리에 효율적이다.
- LINQ 쿼리: LINQ를 이용하면 다양한 형태의 쿼리를 수행할 수 있다.
List의 특성
- 가변적: 데이터를 추가, 삭제, 수정할 수 있는 가변적인 컬렉션이다.
- 즉시 실행: 데이터를 메모리에 모두 로드하여 저장하기 때문에, 빠른 접근이 가능하지만 대량의 데이터 처리할 시 메모리 부족이 발생할 수 있다.
- 인덱싱: 각 요소에 대한 인덱스를 이용하여 직접 접근할 수 있다.
4. IEnumerable과 비슷한 ObservableCollection은 언제 사용하나?
ObservableCollection의 특성
- 가변적: 데이터 추가, 삭제, 수정할 수 있는 가변적인 컬렉션이다.
- 알림 기능: 컬렉션의 내용이 변경될 때마다 UI에 자동으로 반영될 수 있도록 이벤트를 발생시킨다.
- IEnumerable 상속: IEnumerable인터페이스를 상속하기 때문에, IEnumerable의 모든 기능을 사용할 수 있다.
// ObservableCollection 사용 예시 ObservableCollection<string> names = new ObservableCollection<string>() { "Alice", "Bob", "Charlie" }; names.CollectionChanged += (sender, e) => { // 컬렉션이 변경될 때마다 실행되는 코드 (예: UI 업데이트) // ... }; names.Add("David"); // 컬렉션이 변경되면서 UI에 자동으로 반영
5. 결론
- 작성된 코드에 대해 색다른 제네릭 클래스를 보았고, 해당 부분에 대해서 확인해보니 코드 내부에 LINQ를 많이 사용하였고, 메모리 효율을 높이기 위함인것으로 파악하였습니다.
List: 데이터에 대한 작업을 수월하게 하기위함.
IEnumerable: 대량의 데이터를 처리하거나, LINQ를 이용하기 위함.
ObservableCollection: UI업데이트에 대해서 실시간을 진행하고 특정 작업을 수행하기 위함.
출처
https://bigexecution.tistory.com/72
제미나이
'개념 Self Study📝 > C#' 카테고리의 다른 글
Thread? 개념부터 짚자 (0) 2024.09.11 C#과 C++이 데이터를 주고 받는 방법(마샬링) (1) 2023.12.25 MVVM 사용할려면 알아야지 (1) 2023.07.06