C#

2024.03.13 - List

강병곤 2024. 3. 13. 22:42

여러 개의 같은 타입의 데이터를 주고받을 때 배열(Array)을 많이 썼다.

배열 좋긴한데 길이가 고정되어 있는 거랑, 선언할 때 길이를 정해줘야 하는 게 맘에 안 든다.

선언만 해두고 요소를 추가하면 크기가 알아서 늘어나는 배열 없을까?

 

 

  • List

C#에서는 List<T> 클래스를 통해서 배열처럼 인덱스를 통해 각 요소에 접근 가능한 자료구조를 제공한다.

List는 배열과 유사하지만, 배열과 다르게 동적으로 크기가 늘어나는 특징을 가지고 있다.

 

 

  • List의 특징

List는 배열처럼 인덱스로 List의 데이터에 접근이 가능하다.

하지만 크기가 정해져 있는 배열과 달리, List는 크기를 벗어난 인덱스에 데이터를 추가하려고 하면, 동적으로 크기가 변한다. 

 

 

List에 데이터를 삽입/삭제 하면 뒤 인덱스의 다른 데이터들이 다른 칸(메모리)으로 옮겨진다.

 

 

- List를 생성하는 방법

List<자료형> 객체_이름 = new List<자료형>();

 

 

- List에 데이터를 추가하기(Add)

객체_이름.Add( 넣을_데이터 )

myList에 인덱스로 접근하고 있다

 

Add는 List의 가장 뒤의 인덱스에 데이터를 추가해준다.

 

 

- List에 포함된 요소 수 반환(Count)

객체_이름.Count

 

 

- List의 요소 제거(Remove, RemoveAt)

객체_이름.Remove( 특정_데이터 )        // List에서 맨 처음 발견되는 특정_데이터 제거
객체_이름.RemoveAt( 인덱스 )              // List의 지정된 인덱스의 요소 제거

 

Remove로 2번 인덱스에 있던 "데이터1"을 제거했지만, 뒤의 데이터가 빈 자리를 채우면서 RemoveAt(2)로 2번 인덱스의 데이터를 지울 때 2번 인덱스로 옮겨진 "데이터3이 제거되었다.

 

 

- List의 요소 삽입(Insert)

객체_이름.Insert(인덱스, 데이터)    //List의 지정된 인덱스에 데이터를 삽입

 

 

- List의 요소 모두 제거(Clear)

객체_이름.Clear()

 

 

- 현재 List가 크기를 조정하지 않고 보유할 수 있는 요소 수(용량) 반환(Capacity)

객체_이름.Capacity

 

빈 List의 용량은 0이다.

 

List에 데이터를 추가했더니 용량이 4로 늘어났다.

 

데이터를 인덱스 범위를 벗어난 곳에 추가하려 할때마다 용량은 2배가 된다.

 

한번 늘어난 List는 요소를 모두 제거하더라도 용량이 유지된다. (메모리 공간을 차지함)