리스트 ( List )
List<T> 는 C# 에서 가장 널리 사용되는 제네릭 중 하나이다.
C# 에서 배열의 불편함을 개선해서 만든 자료구조이다.
내부적으로는 자료구조 중에서 동적 배열을 기반으로 하며,
크기를 자동으로 늘리면서 순차적으로 데이터를 저장할 수 있다.
단, 내부에서는 실제 배열로 동작이 되고, 크기를 넘어선 추가가 일어날 때
새로운 메모리 공간에 더 큰 배열을 할당하게 된다.
List 선언 방법
리스트는 System.Collections.Generic 네임스페이스 안에 있는 List<T> 제네릭 클래스를 사용한다.
( T 는 타입 자리 - int, string , MyCalss 같은 형식을 넣으면 된다 )
using System.Collections.Generic
// System.Collections.Generic
// 네임스페이스 안에 있는 List<T> 제네릭 클래스를 사용한다
List<int> numbers = new List<int>();
// 리스트 생성 방법 ( 아직 아무 데이터도 들어있지 않음 )
List<int> fruits = new List<string> { "사과", "바나나", "포도" };
// 선언과 동시에 초기값을 넣을 수 있다
int[] arr = { 1, 2, 3, 4 };
List<int> listFromArray = new List<int>(arr);
// 배열을 리스트로 변환하면서 초기화 가능
List<int> characters = new List<int>(100);
// Capacity를 지정하면서 생성 ( 성능 최적화용 )
// 초기에 100개의 공간을 잡아둠 ( 값은 들어있지 않음 )
// 데이터를 대량으로 넣을 때, 리사이즈를 줄여서 성능 최적화 가능
var names = new List<string> { "호찬" , "향숙" };
// 타입을 컴파일러가 추론하게 할수 있다
자주 사용하는 패턴
- Add () : 값 추가
- Count : 현재 개수
- Capacity : 내부 배열 크기
- Remove() , RemoveAt(), Clear() : 값 제거
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 1. 리스트 선언과 초기화
List<string> fruits = new List<string> { "사과", "바나나", "포도" };
// 2. 값 추가
fruits.Add("오렌지");
// 리스트 끝에 추가
fruits.Insert(1, "딸기");
// 인덱스 1 자리에 삽입 (인덱스 0인 사과 다음에 들어감)
// 3. 값 삭제
fruits.Remove("바나나");
// "바나나"라는 값 삭제
fruits.RemoveAt(0);
// 인덱스 0(첫 번째) 삭제
// fruits.Clear();
// 전부 삭제
// 4. 탐색
Console.WriteLine(fruits[0]);
// 인덱스로 접근
Console.WriteLine("총 개수: " + fruits.Count);
// 5. 전체 출력
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
1. Remove ( value )
- 리스트 안에서 값 ( value ) 을 찾아서 삭제
- 처음 발견된 하나만 삭제 ( 중복 있으면 첫 번째 것만 지워짐 )
- 리턴값 : bool - 삭제에 성공하면 true , 못찾으면 false
List<string> fruits = new List<string> { "사과", "바나나", "포도", "바나나" };
fruits.Remove("바나나");
// 첫 번째 "바나나"만 삭제됨 → ["사과", "포도", "바나나"]
2. RemoveAt ( index )
- 인덱스 위치에 있는 요소 삭제
- 해당 인덱스의 값만 삭제된다
- 존재하지 않는 인덱스를 넣으면 에러 발생 ( ArgumentOutOfRangeException )
List<string> fruits = new List<string> { "사과", "바나나", "포도" };
fruits.RemoveAt(1);
// 인덱스 1 → "바나나" 삭제됨 → ["사과", "포도"]
3. RemoveAll ( Predicate<T> match )
- 조건 ( match ) 에 맞는 모든 요소를 삭제한다
- 중복 값이 있으면 전부 다 지워준다
- 리턴값 : 삭제한 요소 개수 ( int )
List<string> fruits = new List<string> { "사과", "바나나", "포도", "바나나", "바나나" };
// "바나나"라는 문자열을 전부 삭제
fruits.RemoveAll(f => f == "바나나");
4. Clear ()
- 리스트 안의 모든 요소를 삭제
- 리스트가 빈 상태 ( Count = 0 ) 가 된다
List<string> fruits = new List<string> { "사과", "바나나", "포도" };
fruits.Clear();
5. 정렬과 뒤집기
numbers.Sort(); // 오름차순 정렬
numbers.Reverse(); // 순서가 반전된다
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1?view=net-8.0
'⭐C Sharp > 15-3. 리스트' 카테고리의 다른 글
| LinkedList<T> (0) | 2025.09.25 |
|---|