# List
- C# List 개념
C#의 List는 C++의 vector와 같다고 보면 된다
중간 삽입, 중간 삭제는 매우 비효율적이다
- C# List 주의점
객체를 생성만 하고 임의 접근을 하면,
항상 런타임에서 ArgumentOutOfRangeException이 발생한다
범위를 벗어난 접근 역시 항상 예외가 발생하며,
C#의 런타임이 이를 안전하게 보호해 준다
즉, C#의 인덱서 접근은 기본적으로 안전하지만
주의해서 코드를 작성할 필요는 당연히 있다
- C++ vector 주의점
객체를 생성만 하고 임의 접근을 하면 'Undefined Behavior'가 발생하며,
Debug 모드에서는 크래시가 발생할 수 있지만,
Release 모드에서는 크래시가 발생하지 않을 수도 있다
범위를 벗어난 접근은 항상 크래시가 발생하는 것이 아니기 때문에,
실수가 발생해도 눈치채지 못할 수 있다
따라서 C++ vector는 C#의 인덱서 접근방식처럼 안전한 접근을 위해
at() 메서드를 사용하는 것이 권장된다
vector<int> v = {1, 2, 3};
cout << v.at(5) << endl; // 안전: 범위 체크 O
- C# List 사용법
using System;
using System.Collections.Generic; // List<T> 사용을 위한 네임스페이스
class Program {
static void Main()
{
List<int> numbers = new List<int>(); // 리스트 생성
// 1️⃣ 요소 추가 (`Add`)
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
Console.WriteLine($"리스트: {string.Join(", ", numbers)}"); // 출력: 10, 20, 30
// 2️⃣ 특정 위치에 요소 삽입 (`Insert`)
numbers.Insert(1, 15); // 1번 인덱스에 15 삽입
Console.WriteLine($"삽입 후 리스트: {string.Join(", ", numbers)}"); // 출력: 10, 15, 20, 30
// 3️⃣ 리스트 요소 개수 확인 (`Count`)
Console.WriteLine($"리스트 크기: {numbers.Count}"); // 출력: 4
// 4️⃣ 특정 요소 제거 (`Remove`)
numbers.Remove(20); // 값이 20인 요소 제거
Console.WriteLine($"제거 후 리스트: {string.Join(", ", numbers)}"); // 출력: 10, 15, 30
// 5️⃣ 특정 위치 요소 제거 (`RemoveAt`)
numbers.RemoveAt(1); // 1번 인덱스(15) 제거
Console.WriteLine($"RemoveAt 후 리스트: {string.Join(", ", numbers)}"); // 출력: 10, 30
// 6️⃣ 리스트 초기화 (`Clear`)
numbers.Clear();
Console.WriteLine($"Clear 후 리스트 크기: {numbers.Count}"); // 출력: 0
}
}
'C# > [루키스] 자료구조' 카테고리의 다른 글
[C# 섹션 5] Dictionary (0) | 2025.06.23 |
---|---|
[C# 섹션 5] 배열 (0) | 2025.06.22 |