기본 개념
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() → 리스트를 배열로 변환하여 성능 최적화 가능
'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 |