개발자이야기/C#

[C#]Foreach 루프: 리스트와 배열 요소 처리 방법

퐈니스타일 2023. 8. 8. 09:00

안녕하세요 여러분! 오늘은 C#에서 다양한 컬렉션 요소를 효율적으로 다루는 기법인 foreach 루프에 대해 설명하려 합니다. 이 루프는 컬렉션, 배열 등의 반복 가능한 객체에서 요소를 차례대로 처리할 때 사용됩니다. 간결하게 작성되어 프로그램의 가독성과 유지 보수성을 높여줍니다.

 

1. 기본 구조와  사용법

foreach 루프는 다음의 구조를 따릅니다.

foreach (variable_type variable_name in enumerable_collection)
{
    // 코드 블록
}

 

간단한 예제를 통해 배운 내용을 활용해 보겠습니다.

string[] fruits = { "apple", "banana", "cherry" };
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

위 코드에서 일반배열인 fruits라는 문자열 배열을 생성한 후, foreach 문을 사용해 배열의 모든 요소를 출력합니다. 여기서 fruit 변수는 각 반복 시 배열의 현재 요소를 담게 됩니다.

2. Foreach와 컬렉션

foreach는 컬렉션 클래스와 함께 사용되는 경우에도 효율적입니다. 예를 들어 다음과 같 List<> 클래스와 함께 사용할 수 있습니다

List<string> pets = new List<string> { "cat", "dog", "hamster" };
foreach (string pet in pets)
{
    Console.WriteLine(pet);
}

이 말은 다른 컬렉션 클래스와 함께 사용할 수 있다 것을 의미하는데, 예를 들어 Dictionary 클래스와 같이 사용하여 키와 값을 쉽게 출력할 수 있습니다.

 

Dictionary<string, string> weekdays = new Dictionary<string, string>()
{
    { "Mon", "Monday" },
    { "Tue", "Tuesday" },
    { "Wed", "Wednesday" },
};

foreach (KeyValuePair<string, string> entry in weekdays)
{
    Console.WriteLine($"{entry.Key}: {entry.Value}");
}

3. 커스텀 클래스와 함께 사용하기

foreach 루프를 사용하려면 커스텀 클래스가 IEnumerable 인터페이스를 구현해야 합니다. 이 인터페이스는 컬렉션을 순회하는 데 필요한 기능을 제공합니다. 다음은 간단한 예시입니다.

class Cars : IEnumerable
{
    string[] carBrands = { "Toyota", "Honda", "Hyundai" };

    public IEnumerator GetEnumerator()
    {
        return new CarsEnumerator(carBrands);
    }
}


위 코드에서 Cars 클래스는 IEnumerable 인터페이스를 구현하고 GetEnumerator() 메서드를 정의합니다. 이 메서드는 반드시 IEnumerator 타입의 객체를 반환해야 합니다. 이 때 IEnumerator에 필요한 메서드와 속성을 구현한 다른 클래스를 생성해 줍니다.

 

class CarsEnumerator : IEnumerator
{
    string[] carBrands;
    int position = -1;

    public CarsEnumerator(string[] carBrands)
    {
        this.carBrands = carBrands;
    }

    public object Current
    {
        get { return carBrands[position]; }
    }

    public bool MoveNext()
    {
        position++;
        return (position < carBrands.Length);
    }

    public void Reset()
    {
        position = -1;
    }
}

이제 사용자 정의 클래스와 함께 foreach를 사용할 수 있습니다.

 

class Program
{
    static void Main(string[] args)
    {
        Cars cars = new Cars();

        foreach (string carBrand in cars)
        {
            Console.WriteLine(carBrand);
        }
    }
}

이렇게 foreach 루프를 활용하면 다양한 요소를 더욱 간결하고 효율적으로 처리할 수 있습니다. 여러분의 프로젝트에서 적절하게 활용하여 보다 나은 코드를 작성하시기 바랍니다. 행운을 빕니다!

728x90
반응형