본문 바로가기
C#/[루키스] 자료구조

[C# 섹션 5] List

by 묻공러 2025. 6. 23.

# 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