C#/배열과 리스트

[C#] List<T> vs. 배열(T[]) 비교

도도돋치 2025. 4. 1. 19:43
Contents 접기
728x90

 

기본 개념

C#에서는 배열(T[])과 리스트(List<T>) 두 가지 방식으로 데이터를 저장함.
배열은 크기가 고정되어 있지만, 리스트는 크기를 동적으로 변경할 수 있다.

 

배열(T[])과 리스트(List<T>)의 차이점

특징 T[] (배열) List<T> (리스트)
크기 고정 크기 (생성 시 지정) 동적 크기 조정 가능
성능 빠름 (연속된 메모리 사용) 추가, 삭제 시 성능 저하 가능
데이터 추가/삭제 불가능 (새 배열 생성 필요) Add(), Remove()로 쉽게 가능
메모리 사용 배열 크기만큼 메모리 할당 내부적으로 더 많은 메모리 할당 가능
접근 속도 빠름 (arr[i] 직접 접근) 약간 느림 (list[i] 접근 가능하지만 추가 기능 있음)
주요 메서드 Length, Sort(), Copy(), Reverse() Add(), Remove(), Insert(), Contains() 

 

동적 배열(List<T>)의 필요성

배열은 크기가 고정되어 있어, 새로운 데이터를 추가하려면 새로운 배열을 만들어야 한다.
하지만 List<T>는 크기가 자동으로 조정되므로 데이터를 동적으로 추가/삭제할 때 유리

 

배열을 사용한 예시 (새 배열을 생성해야 함)
int[] arr = { 1, 2, 3 };
int[] newArr = new int[arr.Length + 1]; // 더 큰 배열 생성
Array.Copy(arr, newArr, arr.Length); 
newArr[3] = 4; // 새로운 값 추가

foreach (int num in newArr)
{
    Console.Write(num + " "); // 출력: 1 2 3 4
}

📌 배열은 크기 변경이 불가능하므로, 새로운 배열을 생성해야 함

 

리스트를 사용한 예시 (간단하게 추가 가능)
List<int> list = new List<int> { 1, 2, 3 };
list.Add(4); // 리스트에 값 추가

foreach (int num in list)
{
    Console.Write(num + " "); // 출력: 1 2 3 4
}

📌 List<T> Add() 메서드로 쉽게 요소를 추가할 수 있음

 

배열과 리스트 변환

배열과 리스트는 서로 변환할 수 있다.

배열 → 리스트 (ToList())

 

🏷 배열을 리스트로 변환하면 List<T>의 기능 활용 가능

int[] arr = { 1, 2, 3, 4 };
List<int> list = arr.ToList();

list.Add(5);
Console.WriteLine(string.Join(", ", list)); // 출력: 1, 2, 3, 4, 5

📌 ToList()를 사용하면 배열을 리스트로 변환 가능

 

리스트 → 배열 (ToArray())

 

🏷 리스트를 배열로 변환하면 T[] 형태로 사용 가능

List<int> list = new List<int> { 10, 20, 30 };
int[] arr = list.ToArray();

Console.WriteLine(string.Join(", ", arr)); // 출력: 10, 20, 30

📌 ToArray()를 사용하면 리스트를 배열로 변환 가능

 

❓왜 리스트만 안쓰고 배열도 사용할까?

공부하다보니 리스트는 가변적으로 크기를 조절할 수 있는데 왜 리스트만 안쓰고 배열도 사용할까에 대한 의문이 생겼다.그 이유는 아래와 같다.

 

1. 메모리 사용량: 리스트는 크기를 조절할 수 있어 배열보다 메모리를 많이 차지하기때문에, 많은 데이터에서 리스트를 많이 사용하게 되면 메모리 사용량이 급격하게 증가하여 성능 저하를 유발할 수 있다. 

2. 데이터 접근: 연결리스트(linked list)는 인덱스 접근이 가능한 배열보다 데이터 접근이 어렵다. 특정 데이터를 찾기 위해서 연결된 노드를 모두 순회해야하기때문이다.

3. 코드 복잡도: 리스트의 동적 할당을 위해서 데이터추가, 삭제등의 코드를 추가하게되면 코드의 가독성이 떨어질 수 있다.

 

📖 정리

 T[] (배열) → 빠르고 메모리 효율적이지만 크기가 고정됨
 List<T> (리스트) → 동적 크기 조정이 가능하여 추가/삭제가 쉬움
 arr.ToList()  배열을 리스트로 변환하여 리스트 기능 사용 가능
 list.ToArray()  리스트를 배열로 변환하여 성능 최적화 가능

728x90

'C# > 배열과 리스트' 카테고리의 다른 글

[C#] 리스트(List)  (0) 2025.04.22
[C#] 컬렉션(Collection)  (0) 2025.04.15
[C#] 배열 관련 메서드  (0) 2025.04.01
[C#] 반복문을 활용한 배열접근  (0) 2025.04.01
[C#] 배열 요소 접근, 배열의 범위  (0) 2025.04.01