C# 3편 배열과 리스트: 여러 데이터를 효율적으로 다루기
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차원 이상의 배열을 사용하여 행과 열로 데이터를 저장할 수 있습니다.
- 배열과 리스트는 모두 반복문과 함께 자주 사용되며, 데이터를 효율적으로 처리하는 데 유용합니다.
다음 편에서는 메서드와 클래스를 학습하여 코드를 더욱 구조화하고 재사용성을 높이는 방법을 배워보겠습니다.