C#

[C#]컬렉션, ArrayList

DevStory 2021. 8. 28.

.NET 프레임워크가 제공하는 컬렉션 클래스에서 배열과 유사한 ArrayList를 소개합니다.

 

배열은 정해진 크기만큼 값을 추가할 수 있으며, 동일한 타입만 다룰 수 있습니다.

 

하지만, ArrayList는 크기가 자동으로 늘어나며, 타입이 서로 다른 값을 추가할 수 있는 자료 구조입니다.

 

이번 포스팅에서는 배열에 비해 유용한 ArrayList를 다루는 방법을 정리하였습니다.

 


ArrayList 생성

우선, 컬렉션인 ArrayList를 사용하기 위해 System.Collectionsusing문에 추가합니다.

using System.Collections;

 

ArrayList 객체는 일반 객체를 생성하는 방법과 동일하며, var 타입도 가능합니다.

ArrayList arlist1 = new ArrayList();

var arlist2 = new ArrayList();

ArrayList 초기화

ArrayList 객체의 값을 초기화하는 방법입니다.

ArrayList arlist = new ArrayList() { 1, "Hi", 5.5, true, 'A', null, " " };

{ } 사이에 초기값을 입력합니다. 서로 다른 타입의 값을 초기값으로 설정하였습니다.

 

ArrayList에는 null도 담을 수 있습니다.

 

아래 코드는 arlist에 담겨 있는 값을 foreach문을 사용하여 값과 타입을 확인하는 코드입니다.

ArrayList arlist = new ArrayList() { 1, "Hi", 5.5, true, 'A', null, " " };

foreach (object obj in arlist)
{
  // null에 GetType()을 사용할 경우 에러가 발생합니다.
  string objType = obj == null ? "null" : obj.GetType().Name;

  Console.WriteLine($"value : {obj } / type :{objType}");
}

실행 결과

 

GetType() 메서드는 값의 타입을 반환하는 함수인데, null에 GetType() 메서드를 사용하면 에러가 발생하므로 null일 경우에는 문자열 "null"을 반환하도록 코드를 작성했습니다.

string objType = obj == null ? "null" : obj.GetType().Name;

 

아래는 ArrayList 객체의 값을 초기화하는 또 다른 방법입니다.

 

ArrayList 생성자에 object 타입의 배열을 전달하여 값을 초기화합니다.

ArrayList arlist = new ArrayList(new object[]{ 1, "Hi", 5.5, true, 'A', null, " " });

 

컬렉션 이니셜 라이즈를 사용하여 값을 초기화합니다.

ArrayList arlist = new ArrayList{ 1, "Hi", 5.5, true, 'A', null, " " };

ArrayList에 값 추가

ArrayList에 값을 추가할 수 있는 방법은 여러 가지가 있겠지만, 가장 기본적인 방법만 정리하였습니다.

  • Add() 메서드를 사용하여 마지막 위치에 값을 추가합니다.
  • AddRange() 메서드를 사용하여 ICollection(배열과 유사한 객체들)의 요소를 마지막 위치에 추가합니다.
  • Insert() 메서드를 사용하여 원하는 위치에 값을 추가합니다.

 

Add() 메서드를 사용하여 마지막 위치에 값을 추가하는 방법입니다.

ArrayList arlist = new ArrayList();
arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.Add(30); // 10 20 30

 

AddRange() 메서드를 사용하여 ICollection의 요소를 마지막 위치에 추가하는 방법입니다.

ArrayList arlist = new ArrayList();

object[] obj = {30, 40, 50};

arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.AddRange(obj); // 10 20 30 40 50

object 타입의 배열인 obj의 값을 Arraylist의 마지막 위치에 추가하였습니다.

 

배열뿐만 아니라 ArrayList도 AddRange() 메서드를 사용하여 마지막 위치에 추가할 수 있습니다.

ArrayList arlist = new ArrayList();

ArrayList arlist2 = new ArrayList(){ "A", "B", "C" };

arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.Add(30); // 10 20 30
arlist.AddRange(arlist2); // 10 20 30 A B C

 

Insert() 메서드를 사용하여 원하는 위치에 값을 추가하는 방법입니다.

ArrayList arlist = new ArrayList();

arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.Add(30); // 10 20 30
arlist.Insert(0, 0); // 0 10 20 30

0번째 인덱스에 값을 추가하였습니다.

 

Insert() 메서드는 Arraylist.Count보다 큰 값으로 위치를 설정할 경우 크기를 벗어나므로 에러가 발생하므로 주의하여 사용합니다.


ArrayList에 값을 제거

ArrayList에 값을 제거할 수 있는 방법은 Remove(), RemoveAt(), RemoveRange() 메서드가 존재합니다.

  • Remove() 메서드는 지정된 값을 제거합니다. 동일한 값이 여러 개 있을 경우 0번째 인덱스에서 가장 가까운 값부터 제거합니다.
  • RemoveAt() 메서드는 지정된 위치의 값을 제거합니다.
  • RemoveRange() 메서드는 지정된 위치에서 개수만큼 값을 제거합니다.

 

Remove() 메서드를 사용하여 지정된 값을 제거하는 방법입니다.

ArrayList arlist = new ArrayList();

arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.Add(30); // 10 20 30
arlist.Add(10); // 10 20 30 10
arlist.Add(20); // 10 20 30 10 20 
arlist.Add(30); // 10 20 30 10 20 30

arlist.Remove(10); // 20 30 10 20 30
arlist.Remove(30); // 20 10 20 30

만약, 삭제하고자 하는 값이 ArrayList에 존재하지 않을 경우 아무런 변경도 발생하지 않습니다.

 

RemoveAt() 메서드를 사용하여 지정된 위치의 값을 제거하는 방법입니다.

ArrayList arlist = new ArrayList();

arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.Add(30); // 10 20 30
arlist.Add(10); // 10 20 30 10
arlist.Add(20); // 10 20 30 10 20 
arlist.Add(30); // 10 20 30 10 20 30

arlist.RemoveAt(0); // 20 30 10 20 30
arlist.RemoveAt(1); // 20 10 20 30

 

RemoveAt() 메서드는 ArrayList.Count를 벗어난 값으로 설정할 경우 에러가 발생합니다.

 

RemoveRange() 메서드를 사용하여 지정된 위치에서 개수만큼 값을 제거하는 방법입니다.

ArrayList arlist = new ArrayList();

arlist.Add(10); // 10
arlist.Add(20); // 10 20
arlist.Add(30); // 10 20 30
arlist.Add(10); // 10 20 30 10
arlist.Add(20); // 10 20 30 10 20 
arlist.Add(30); // 10 20 30 10 20 30

arlist.RemoveRange(0, 3); // 10 20 30

0번째 위치에서 arlist의 요소 3개를 제거하였습니다.

 

만약, 위치 또는 개수가 ArrayList.Count를 초과할 경우 에러가 발생합니다.

 

아래는 arlist의 요소가 6개인데, 삭제하고자 개수가 6개를 초과하였으므로 에러가 발생합니다.

반응형

댓글