[C#] List<T>란 무엇인가?

Date:     Updated:

카테고리:

태그:

System.Collections.Generic.List<T>에 대해 공부하다가 알게된 정보를 정리한 글입니다.
주로 어떤 원리로 작동되는 지 공부해 정리하였습니다.

List<T>란?

  • List<T>는 필요에 따라 크기가 동적으로 증가하는 T타입 배열이다
  • 내부에 요소를 보관할 배열을 가지고 있다
  • 정렬을 보장하지 않는다
  • 인덱스는 정수 인덱스로 접근이 가능하다

List<T>는 어떻게 동적 배열로 작동하는가?

  • 요소를 추가할 때마다 남은 공간이 없을 때 현재 capacity의 2배 크기의 배열을 새로 할당해 요소를 복사한다
  • 그래서 계속 요소를 추가할 수 있었던 것이다

생성자

List()
  • 용량이 0인 정적 배열을 참조 (바로 배열 할당이 이루어 지는 것은 아님)
  • 첫 요소를 추가할 때 기본 초기 용량 크기의 배열이 할당되어 참조 (.NET Framework 4.8에서 기본 초기 용량은 4)
- List(int capacity)
  • capacity 크기의 배열을 할당해 참조
- List(IEnumerable<T> collection)
  • collection이 ICollection<T>를 구현한 경우
    • Count를 가져와 Count 크기의 배열을 할당 및 요소 복사
  • 구현을 못 한 경우
    • 열거자를 통해 모든 요소를 순회하면서 Add(T item) 호출

요소 추가

  • 요소를 추가할 때 배열에 남은 공간이 없을 경우 현재 capacity의 2배 크기의 배열을 새로 할당해 요소를 전부 복사한다
  • 따로 인덱스를 지정하지 않으면 마지막에 추가된다
  • 만약 중간에 요소를 추가하는 경우 추가되는 위치 뒤에 있던 요소들은 뒤로 복사한다

요소 제거

  • 중간에 있는 요소를 제거하는 경우 제거되는 위치 뒤에 있던 요소들을 앞으로 복사한다
  • 요소 제거 후 사용되지 않는 요소는 default로 설정된다

내부 배열에 변경이 생겼을 때

  • this[], Add, Remove, Sort 등등
  • version이 올라감
  • version은 ForEachEnumerator를 사용할 때 유효성 검사 목적으로 사용됨

출처



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

CSharp 카테고리 내 다른 글 보러가기

댓글 남기기