[C#] List

Learning 

When: 1학년 7월 13일

 

How:

Dictionary나 배열에 대해선 알지만 자주 쓰이는 List에 대해선 몰랐기에 공부를 하려고 하다가 계속 새로운 것을 공부해서 그것들을 정리하다 조금 늦었지만 지금이라도 해야 할 것 같아서 공부를 하게 되었습니다.

 

Understanding:

  • 정의 : List는 가변 크기의 배열이라고 생각하시면 됩니다. 배열의 친구들인 Dictionary나 Stack 같은 collection 타입 클래스이기 때문에 배열과 상당히 닮았습니다.
  • 배열과의 차이점 : 배열은 처음 크기를 정하면 그대로 담을 수 있는 요소를 추가하거나 삭제하는 '크기를 바꾸는 것'을 할 수 없습니다. 하지만 List는 Add(), Remove() 등 메서드로 List 안에 있는 요소들을 추가하거나 삭제하는 것이 가능합니다. 즉 크기를 자연스럽게 바꿀 수 있습니다. 이것 말고도 사용할 수 있는 메서드가 배열보다 많아 쓰기 좋은 등 다른 점이 있긴 하지만 커다란 차이점은 이것 하나뿐입니다.
  • 선언 방법 : 아래의 코드는 아주아주 간단한 names라는 리스트를 선언하고 Add로 추가한 다음 Remove로 제거해서 마지막에 foreach문으로 콘솔에 names 리스트를 출력하는 코드입니다. 조금 더 자세히 설명해 보자면 처음에 List<string> names는 리스트 변수를 생성하는 코드이고, string을 담는 리스트 변수를 선언하는 것입니다. List는 클래스이기 때문에 리스트 변수는 리스트 객체를 참조하여 그 객체에서 요소를 추가하고 삭제하는 일을 합니다. 그렇기에 List 변수를 선언만 하지 말고 참조를 시켜주어야 하는데, 이것도 new 생성자<제네릭 타입>(); 이렇게 생성자로 리스트 객체를 만들어서 변수에 참조해 주면 됩니다.
    (제네릭 타입에 대해 https://hwanji203.tistory.com/48)
    그 후에는 메서드를 통해 요소 추가하고 삭제하는데, 바로 다음 차례에 설명이 있습니다.
static void Main(string[] args)
{
    List<string> names = new List<string>();

    names.Add("Hwan");
    names.Add("YongMin");
    names.Remove("YongMin");

    foreach (string name in names)
    {
        Console.WriteLine(name);
    }
}
  • 메서드 : 아래는 List에 사용할 수 있는 메서드들을 설명한 표입니다.
메서드명 설명
삽입
.Add(value) 리스트의 가장 마지막 인덱스로 value 요소를 추가합니다.
.AddRange(collection) 리스트에 collection(배열, Stack, Dictionary 등)을 뒤에 추가합니다. 
.Insert(index, value) 인덱스 번호가 index인 요소를 뒤로 밀고 빈칸에 value를 삽입합니다. (value는 인덱스 번호가 index가 됩니다.)
.InsertRange(index, collection) 인덱스 번호가 index인 요소을 collection의 Range만큼 밀고 그 안을 전부 collection으로 채웁니다.
삭제 (null이 되는 것이 아닌 인덱스 자체를 삭제합니다.)
.Remove(value) 가장 처음에 있는 요소가 value와 같은 요소를 지웁니다.
.RemoveAt(index) 인덱스 번호가 index인 요소을 지웁니다.
.RemoveAll(predicate) 람다식을 사용하거나 Predicate 델리게이트 타입의 변수에 메서드를 넣어서 사용하는데, 쉽게 설명하면 리스트에 있는 요소를 하나씩 스스로 만든 메서드에 넣어서 true면 지우는 것을 가능하게 해주는 메서드입니다.
.Clear() 리스트의 모든 요소를 지웁니다.
그 외
.Contains(value) value가 하나라도 있으면 true 아니면 false를 반환합니다.
.IndexOf(value) 가장 처음에 있는 value와 같은 요소의 인덱스를 반환합니다.
LastIndexOf(value) 가장 마지막에 있는 value와 요소의 인덱스를 반환합니다.
Find(predicate) RemoveAll과 같은 매커니즘으로 가장 처음에 있는 요소를 반환합니다.
FindAll(predicate) 조건에 만족하는 모든 요소를 리스트로 반환합니다.
Exists(predicate) 조건에 맞는 요소가 하나라도 있는지 확인하여 true와 false를 반환합니다.

 

Result: 리스트는 이와 같이 정말 편리한 배열을 정말 편하게 사용할 수 있는 collection 중 하나이므로 잘 사용하면 좋을 것 같습니다.

'C#' 카테고리의 다른 글

[C#] 람다식(1)  (2) 2025.07.15
[C#] Action, Func  (0) 2025.07.14
[C#] event 키워드  (1) 2025.07.09
[C#] 대리자 (Delegate)  (0) 2025.07.08
[C#] bool 타입이 아닌 값을 반환 형식이 bool인 메서드에서 반환하기  (0) 2025.07.02