본문 바로가기
프로그래밍/C#

C# 컬렉션 - System.Collections.ArrayList

by bantomak 2023. 5. 22.
반응형

ArrayList에 대해서

ArrayList는 object 타입 및 그와 형변환할 수 있는 모든 타입을 인자로 받아 컬렉션에 추가/삭제/변경/조회할 수 있는 기능을 구현한 타입이다. 간단하게 생각해서 크기가 자유롭게 변할 수 있는 배열이라고 보면 된다.

 

 

result

 

ArrayList는 object를 인자로 갖기 때문에 닷넷의 모든 타입을 담을 수 있다는 장점이 있지만 반대로 이로 인해 박싱이 발생한다는 단점이 있다. 따라서 System.ValueType을 상속받는 값 형식을 위한 컬렉션으로는 적당하지 않다. 이를 해결하기 위해서는 닷넷 2.0부터 지원되는 제네릭(Generic)이 적용된 List<T> 타입을 사용하는 것이 권장된다.

(ArrayList는 deprecated되었다. 특수한 경우가 아니라면 List<T>를 사용하도록 하자)

 

ArrayList는 요소를 정렬할 수 있는 메서드도 제공한다. 배열의 경우에는 Array.Sort 정적 메서드를 이용했지만 ArrayList에는 인스턴스 메서드로 Sort가 제공된다. Sort 메서드를 호출할 때 제약사항이 있다면 ArrayList 안에 있는 모든 요소가 모두 같은 타입이어야 한다는 것이다.

 

만약 사용자 정의 타입을 요소로 가지고 있다면 어떻게 Sort를 해야할까? ArrayList.Sort 메서드는 기본적으로 요소의 객체가 IComparable 인터페이스를 구현하고 있는지 확인한다. 만약 그렇다면 해당 메서드의 CompareTo 메서드를 호출해 그 결과로 정렬 작업을 수행한다. 아래 예제에서는 Person 타입이 스스로 IComparable 인터페이스를 구현하고 있다. 따라서 ArrayList에서 단순히 Sort를 호출하기만 해도 요소가 정렬된다.

 

 

result2

 

관련 포스팅

 

Boxing, UnBoxing에 대해서 알아보자

값 타입과 참조 타입을 서로 변환해주는걸 Boxing, UnBoxing이라고 합니다. 값 타입과 참조 타입 저장 위치 상속 데이터 타입 예시 값 타입(Value Type) 스택(Stack) 영역 System.ValueType int, char, double..등 기

jettstream.tistory.com

댓글