언어 자료구조 알고리즘/Escort C#

[C#] 8.2 컬렉션 - ICollection 인터페이스

언제나휴일 2016. 5. 3. 16:05
반응형


ICollection 인터페이스


8.2 컬렉션


8.2.2 ICollection 인터페이스

 

 ICollection 인터페이스는 제네릭이 아닌 모든 컬렉션의 기반 인터페이스입니다. 제네릭 컬렉션은 IColleciont<> 인터페이스를 기반으로 정의되어 있는데 여기서는 ICollection 인터페이스에 대해 살펴볼게요.

 

 ICollection C#에서 제공하는 제네릭이 아닌 모든 컬렉션의 기반 인터페이스로 컬렉션에 보관된 요소의 개수와 다른 컬렉션에 보관된 요소를 복사하는 메서드, 열거자, 동기화 메서드가 약속되어 있습니다. 물론, 열거자는 ICollection IEnumerable을 기반으로 정의되어 있기 때문입니다.

 

ICollection 인터페이스의 약속된 멤버

//System. Collections 정의되어 있음

public interface ICollection : IEnumerable

{

    void CopyTo(Array array, int index); //보관된 요소들을 array 복사

    int Count //보관된 요소 개수 가져오기

    {

        get;

    }

    bool IsSynchronized //동기화 가능 여부

    {

        get;

    }

    object SyncRoot //동기화 대상 개체 가져오기

    {

        get;

    }

}

 

 ICollection Count속성은 보관된 요소 개수를 가져올 때 사용합니다. C#에 제네릭이 아닌 모든 컬렉션은 ICollection을 기반으로 정의되어 있어서 배열이나 ArrayList 등의 개체에서 사용할 수 있습니다. , 배열은 ICollection을 기반으로 하지만 약속된 기능을 명시적으로 구현하고 있어서 ICollection 개체를 참조해야 사용할 수 있습니다.

 

ICollection 인터페이스의 Count 속성

class Program

{

    static void Main(string[] args)

    {

        int[] arr = new int[3]{1,2,4};

        View(arr);

        ArrayList ar = new ArrayList();

        ar.Add(2);

        ar.Add(3);

        View(ar);

    }

    private static void View(ICollection ic)

    {

        Console.WriteLine("Count:{0}", ic.Count);

        foreach (object obj in ic)

        {

            Console.Write("{0} ",obj);

        }

        Console.WriteLine();

    }

}

▶ 실행 결과

Count:3

1 2 4

Count:2

2 3

 CopyTo 메서드는 보관된 요소들을 입력 인자로 전달된 1차원 배열의 특정 인덱스에 복사하는 메서드입니다.

 

ICollection 인터페이스의 CopyTo 메서드

class Program

{

    static void Main(string[] args)

    {

        int[] srcarr = new int[3]{1,2,4};

        int[] dstarr = new int[5]{11,12,131,4,15};

        //dstarr개체의 인덱스 2위치에 srcarr 개체에 보관된 요소들을 복사

        srcarr.CopyTo(dstarr, 2);

        View(dstarr);

    }

    private static void View(ICollection ic)

    {

        Console.WriteLine("Count:{0}", ic.Count);

        foreach (object obj in ic)

        {

            Console.Write("{0} ",obj);

        }

        Console.WriteLine();

    }

}

▶ 실행 결과

Count:5

11 12 1 2 4

 

 이 외에 쓰레드를 사용하는 비동기식 프로그래밍에서 동기화 가능 여부를 확인하는 속성과 동기화에 사용하는 개체를 참조하는 속성이 있습니다. 여기서는 이에 대한 설명은 생략하겠습니다.


너와 나의 연결고리 "공감"

반응형