Study/C#

C# 3편 배열과 리스트: 여러 데이터를 효율적으로 다루기

wawManager 2024. 10. 22. 12:00
728x90

1. 배열이란?

배열은 동일한 데이터 타입의 여러 요소를 저장하는 데 사용되는 자료구조입니다. 배열의 크기는 한 번 설정되면 변경할 수 없으며, 고정된 길이를 갖습니다.

배열 선언 및 초기화

배열을 선언할 때는 데이터 타입 뒤에 대괄호 []를 사용합니다. 배열을 초기화하는 방법은 두 가지가 있습니다.

  • 선언 후 초기화:
int[] numbers = new int[5]; // 크기가 5인 배열 선언
numbers[0] = 10; // 배열의 첫 번째 요소에 값 할당
numbers[1] = 20;

 

  • 선언과 동시에 초기화:
int[] numbers = { 10, 20, 30, 40, 50 }; // 초기 값 할당

배열 요소 접근

배열의 요소는 0부터 시작하는 인덱스를 사용하여 접근할 수 있습니다.

Console.WriteLine(numbers[0]); // 출력: 10
Console.WriteLine(numbers[1]); // 출력: 20

배열 길이 확인

배열의 길이를 확인하려면 Length 속성을 사용합니다.

int length = numbers.Length; // 배열의 길이: 5

2. 배열의 반복문 활용

배열은 반복문과 함께 자주 사용됩니다. for 문 또는 foreach 문을 사용하여 배열의 모든 요소를 순회할 수 있습니다.

for 문을 사용한 배열 순회

int[] numbers = { 10, 20, 30, 40, 50 };
for (int i = 0; i < numbers.Length; i++)
{
    Console.WriteLine(numbers[i]);
}

foreach 문을 사용한 배열 순회

foreach 문은 배열의 모든 요소를 순차적으로 처리할 때 유용합니다.

int[] numbers = { 10, 20, 30, 40, 50 };
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

3. 다차원 배열

C#에서는 2차원 이상의 다차원 배열을 사용할 수 있습니다. 2차원 배열은 주로 행(row)과 열(column)로 데이터를 표현할 때 사용됩니다.

int[,] matrix = new int[2, 3]; // 2x3 배열 선언
matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[0, 2] = 3;
matrix[1, 0] = 4;
matrix[1, 1] = 5;
matrix[1, 2] = 6;

또는 선언과 동시에 초기화할 수 있습니다.

int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 } };

2차원 배열 요소 접근

Console.WriteLine(matrix[0, 0]); // 출력: 1
Console.WriteLine(matrix[1, 2]); // 출력: 6

2차원 배열 순회

for 문을 사용하여 2차원 배열을 순회할 수 있습니다.

for (int i = 0; i < matrix.GetLength(0); i++) // 행 순회
{
    for (int j = 0; j < matrix.GetLength(1); j++) // 열 순회
    {
        Console.Write(matrix[i, j] + " ");
    }
    Console.WriteLine();
}

4. 리스트(List)

리스트는 배열과 유사하지만 크기가 고정되어 있지 않고, 동적으로 데이터를 추가하거나 삭제할 수 있는 자료구조입니다. C#에서 리스트는 System.Collections.Generic 네임스페이스의 List<T> 클래스를 사용합니다.

리스트 선언 및 초기화

using System.Collections.Generic;

List<int> numbers = new List<int>(); // 빈 리스트 생성
numbers.Add(10); // 리스트에 값 추가
numbers.Add(20);
numbers.Add(30);

리스트는 배열과 달리 크기를 동적으로 조절할 수 있습니다. 값을 추가할 때마다 리스트의 크기가 늘어납니다.

리스트 요소 접근

리스트의 요소는 배열과 마찬가지로 인덱스를 통해 접근합니다.

Console.WriteLine(numbers[0]); // 출력: 10

리스트의 크기 확인

리스트의 크기는 Count 속성을 통해 확인할 수 있습니다.

int count = numbers.Count; // 리스트의 크기: 3

리스트의 반복문 활용

리스트도 배열과 마찬가지로 for 문 또는 foreach 문을 사용하여 순회할 수 있습니다.

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

리스트에서 요소 삭제

  • 인덱스를 이용해 삭제:
numbers.RemoveAt(1); // 두 번째 요소 삭제
  • 값을 이용해 삭제:
numbers.Remove(10); // 값이 10인 요소 삭제

5. 리스트와 배열 변환

리스트와 배열은 서로 변환할 수 있습니다.

리스트를 배열로 변환

int[] array = numbers.ToArray();

배열을 리스트로 변환

int[] numbersArray = { 1, 2, 3, 4 };
List<int> numbersList = new List<int>(numbersArray);

6. 실습 예제: 학생 점수 평균 계산

리스트를 사용하여 학생들의 점수를 입력받고, 평균을 계산하는 프로그램을 작성해봅시다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<int> scores = new List<int>();
        int score = 0;

        Console.WriteLine("학생들의 점수를 입력하세요 (종료하려면 -1 입력):");
        
        while (true)
        {
            score = Convert.ToInt32(Console.ReadLine());

            if (score == -1)
                break;
            
            scores.Add(score);
        }

        int sum = 0;
        foreach (int s in scores)
        {
            sum += s;
        }

        double average = (double)sum / scores.Count;
        Console.WriteLine($"평균 점수: {average}");
    }
}

7. 실습 예제: 2차원 배열로 구구단 출력

2차원 배열을 사용하여 구구단을 출력하는 프로그램을 작성해봅시다.

using System;

class Program
{
    static void Main(string[] args)
    {
        int[,] multiplicationTable = new int[9, 9];

        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= 9; j++)
            {
                multiplicationTable[i - 1, j - 1] = i * j;
                Console.Write($"{i} x {j} = {multiplicationTable[i - 1, j - 1]} \t");
            }
            Console.WriteLine();
        }
    }
}

8. 요약

  • 배열은 고정된 크기를 가진 동일한 타입의 데이터 저장소이며, 인덱스를 통해 접근합니다.
  • 리스트는 동적 크기를 가지며, 요소의 추가와 삭제가 가능합니다.
  • 다차원 배열은 2차원 이상의 배열을 사용하여 행과 열로 데이터를 저장할 수 있습니다.
  • 배열과 리스트는 모두 반복문과 함께 자주 사용되며, 데이터를 효율적으로 처리하는 데 유용합니다.

다음 편에서는 메서드와 클래스를 학습하여 코드를 더욱 구조화하고 재사용성을 높이는 방법을 배워보겠습니다.

728x90