C# ArrayList 사용법과 List 차이: 새 코드에서 선택하는 기준

C# ArrayList의 Add, Remove, 인덱스 접근을 예제로 설명하고 List와의 차이를 정리합니다. 오래된 예제의 의미는 살리되 현재 기준에서 잘못 적용하기 쉬운 부분을 함께 고쳤어요. 아래 순서대로 확인하면 단순한 화면 복사보다 실제 판단에 도움이 됩니다.

C# ArrayList에 여러 형식의 값을 담는 기존 예제 화면
ArrayList는 서로 다른 형식을 담을 수 있지만, 꺼낼 때 명시적인 형식 확인이 필요합니다.

ArrayList는 object를 저장한다

ArrayList는 크기가 자동으로 늘어나는 비제네릭 컬렉션입니다. 문자열과 숫자를 한 목록에 넣을 수 있지만, 내부에서는 모든 항목을 object로 다뤄요. 값을 꺼낼 때 원래 형식을 알고 변환해야 하므로 오류가 실행 시점까지 늦게 발견될 수 있습니다.

var items = new ArrayList();
items.Add("서울");
items.Add(3);

string city = (string)items[0];
int count = (int)items[1];

추가와 삭제는 쉽지만 형식 안전성이 약하다

Add는 끝에 값을 넣고, Insert는 지정한 위치에 끼워 넣습니다. Remove는 같은 값을 찾아 지우고, RemoveAt은 인덱스로 삭제해요. 삭제 뒤에는 뒤쪽 인덱스가 당겨지므로 반복문 안에서 앞에서부터 지우면 항목을 건너뛸 수 있습니다.

값 형식이 섞인 상태에서 잘못 캐스팅하면 InvalidCastException이 발생합니다. 값 형식은 object로 들어갈 때 박싱되고 다시 꺼낼 때 언박싱되므로 새 코드에서 굳이 감수할 이유가 적습니다.

새 코드에서는 List를 먼저 선택한다

List<T>는 저장 형식을 컴파일 시점에 고정합니다. List<int>에는 정수만 들어가므로 잘못된 값이 들어가는 문제를 빌드 단계에서 잡을 수 있어요. API가 ArrayList를 반환하는 오래된 코드와 연동할 때는 ArrayList가 필요할 수 있지만, 새 컬렉션을 설계한다면 List가 기본 선택입니다.

선택 기준레거시 API 호환이 필요하면 ArrayList를 유지하되 경계에서 형식을 검사하고, 새 코드라면 List<T>로 형식을 명확히 하세요.

레거시 ArrayList를 바꿀 때는 경계를 먼저 찾는다

오래된 프로그램에서 ArrayList를 곧바로 List로 치환하면 외부 라이브러리나 데이터 바인딩 코드가 깨질 수 있습니다. 먼저 값을 넣는 지점과 꺼내는 지점을 찾아 실제로 어떤 형식이 들어오는지 확인하세요. 서로 다른 형식이 섞여 있다면 하나의 공통 모델이나 여러 명확한 목록으로 나누는 설계가 필요합니다.

변환 과정에서는 Cast<T>가 잘못된 항목에서 예외를 내고, OfType<T>는 다른 형식을 건너뛴다는 차이도 알아야 해요. 누락이 허용되지 않는 데이터라면 조용히 건너뛰는 방식보다 명시적인 검사와 오류 기록이 안전합니다.

예제를 직접 확인하는 순서

코드를 그대로 읽는 데서 끝내지 말고 작은 콘솔 프로젝트에 옮겨 정상 입력과 잘못된 입력을 각각 실행해 보세요. 컴파일 오류와 실행 중 예외는 원인이 다릅니다. 경고가 표시되면 무시하지 말고 사용 중인 .NET과 C# 언어 버전도 확인합니다.

예제의 이름과 출력 문장은 바꿔도 핵심 형식과 호출 구조는 유지해야 해요. 한 줄씩 수정하면서 결과가 왜 달라지는지 기록하면 문법을 외우는 것보다 오래 남습니다. 운영 코드에 적용하기 전에는 null, 빈 값, 예상 범위를 벗어난 값도 별도 테스트로 확인하세요.

자주 묻는 질문

기존 글의 게시일과 URL은 바뀌나요?

아니요. 이 글은 기존 게시물을 보완한 것이며 원래 공개 URL을 유지합니다.

화면이 글과 다르면 어떻게 하나요?

서비스 화면과 메뉴는 바뀔 수 있으므로 글의 원리와 공식 문서를 먼저 확인하고 현재 화면에서 같은 기능명을 찾으세요.

한 번 설정하면 다시 확인하지 않아도 되나요?

버전·정책·환경이 바뀔 수 있습니다. 업데이트나 스킨 변경 뒤에는 핵심 동작을 다시 점검하는 편이 안전합니다.

공식 자료

이 글은 기존 게시물의 URL과 기록 가치를 유지하면서 현재 독자가 실행할 수 있도록 내용을 다시 확인해 보완했습니다.

댓글 쓰기

0 댓글