ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    제미나이

     

Designed by Tistory.