이 글에서는 Android 앱 개발 시 배열(Array)을 ArrayList로 변환하는 방법을 단계별 예제와 함께 알아보겠습니다. Java에서는 Arrays.asList() 메서드를 활용하면 배열을 손쉽게 리스트 형태로 변환할 수 있으며, 이를 ArrayList 생성자에 전달하면 동적으로 크기가 조절되는 리스트를 만들 수 있습니다.
1단계: 새 프로젝트 생성
Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성 (res/layout/activity_main.xml)
아래 코드를 res/layout/activity_main.xml 파일에 추가합니다.
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity"
android:orientation = "vertical">
<EditText
android:id = "@+id/name"
android:layout_width = "match_parent"
android:hint = "Enter Name"
android:layout_height = "wrap_content" />
<LinearLayout
android:layout_width = "wrap_content"
android:layout_height = "wrap_content">
<Button
android:id = "@+id/save"
android:text = "Save"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
<Button
android:id = "@+id/refresh"
android:text = "Refresh"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
</LinearLayout>
<ListView
android:id = "@+id/listView"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
</ListView>
</LinearLayout>위 레이아웃에는 이름을 입력받는 EditText, 데이터를 저장하는 Save 버튼, ListView를 갱신하는 Refresh 버튼, 그리고 결과를 표시할 ListView가 포함되어 있습니다. 사용자가 Save 버튼을 클릭하면 입력한 데이터가 ArrayList에 저장되고, Refresh 버튼을 누르면 ListView의 변경 사항이 화면에 반영됩니다.
3단계: MainActivity.java 작성
다음 코드를 src/MainActivity.java 파일에 추가합니다.
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
EditText name;
ArrayAdapter arrayAdapter;
ArrayList<String> array_list;
Set set = new HashSet();
private ListView listView;
@Override
protected void onCreate(Bundle readdInstanceState) {
super.onCreate(readdInstanceState);
setContentView(R.layout.activity_main);
array_list = new ArrayList<String>();
array_list.ensureCapacity(20);
name = findViewById(R.id.name);
listView = findViewById(R.id.listView);
findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
arrayAdapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
}
});
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty()) {
set.add(name.getText().toString());
array_list.clear();
if (array_list.isEmpty()) {
String[] array = new String[]{"ANDROID", "JSP", "JAVA", "STRUTS", "HADOOP", "JSF"};
ArrayList<String> list = new ArrayList<String>(Arrays.asList(array));
array_list.addAll(list);
array_list.addAll(set);
Collections.sort(array_list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
array_list.trimToSize();
arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list);
listView.setAdapter(arrayAdapter);
} else {
listView.setVisibility(View.GONE);
}
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
} else {
name.setError("Enter NAME");
}
}
});
}
}핵심 코드 분석: 배열 → ArrayList 변환
위 코드에서 배열을 ArrayList로 변환하는 핵심 부분은 다음 두 줄입니다.
String[] array = new String[]{"ANDROID", "JSP", "JAVA", "STRUTS", "HADOOP", "JSF"};
ArrayList<String> list = new ArrayList<String>(Arrays.asList(array));- Arrays.asList(array): 배열을 고정 크기의 List 뷰로 변환합니다. 이때 반환된 리스트는 원본 배열과 연결되어 있어 요소 추가/삭제가 불가능합니다.
- new ArrayList<>(Arrays.asList(array)): 변환된 List를 ArrayList 생성자에 전달하여, 요소를 자유롭게 추가·삭제할 수 있는 독립적인 ArrayList를 새로 만듭니다.
이후 Collections.sort()로 리스트를 알파벳 순으로 정렬하고, trimToSize()를 호출해 불필요한 여유 용량을 제거한 뒤 ArrayAdapter에 연결하여 ListView에 표시합니다. 또한 HashSet을 활용해 중복된 이름 입력을 방지하는 로직도 함께 구현되어 있습니다.
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 Android 스마트폰을 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘을 클릭하세요. 실행 옵션에서 본인의 모바일 기기를 선택하면, 기본 화면이 다음과 같이 표시됩니다.

위 실행 결과에서 확인할 수 있듯이, 배열에 담긴 항목들이 ArrayList로 변환되어 정렬된 상태로 ListView에 출력됩니다. 사용자가 새 이름을 입력하고 Save 버튼을 누르면 해당 값도 목록에 추가됩니다.
마무리
지금까지 Android에서 배열을 ArrayList로 변환하는 방법을 살펴보았습니다. Arrays.asList()와 ArrayList 생성자를 조합하면 간단하게 변환할 수 있으며, 이렇게 만든 ArrayList는 동적 데이터 처리에 매우 유용합니다. 참고로 Java 8 이상 환경이라면 Stream API(Stream.of(array).collect(Collectors.toList()))를 사용하는 방법도 있으니 상황에 맞게 활용해 보시기 바랍니다.