이 글에서는 안드로이드 앱에서 SortedSet 인터페이스를 사용하는 방법을 단계별로 살펴봅니다. SortedSet은 Java 컬렉션 프레임워크의 일부로, 요소들을 자동으로 오름차순으로 정렬해 주는 Set입니다. 대표적인 구현 클래스인 TreeSet을 활용하면 중복 없이 정렬된 데이터를 손쉽게 관리할 수 있습니다.
이번 예제에서는 사용자가 이름을 입력하면 TreeSet에 저장하고, 저장된 데이터를 ArrayList에 옮겨 ListView에 표시하는 간단한 앱을 만들어 보겠습니다.
1단계: 새 프로젝트 생성
Android Studio를 실행한 뒤 File ⇒ New Project 메뉴로 이동하여 새 프로젝트를 생성합니다. 필요한 모든 세부 정보를 입력하고 프로젝트 설정을 완료하세요.
2단계: 레이아웃 파일 작성
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 버튼, 목록을 갱신하는 Refresh 버튼, 그리고 결과를 표시할 ListView가 포함되어 있습니다. 사용자가 Save 버튼을 누르면 입력한 이름이 TreeSet에 저장되고, Refresh 버튼을 누르면 ListView가 최신 상태로 갱신됩니다.
3단계: MainActivity 작성
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.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class MainActivity extends AppCompatActivity {
EditText name;
ArrayAdapter arrayAdapter;
ArrayList<String> array_list;
SortedSet set = new TreeSet();
private ListView listView;
@Override
protected void onCreate(Bundle readdInstanceState) {
super.onCreate(readdInstanceState);
setContentView(R.layout.activity_main);
array_list = new ArrayList<>();
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();
array_list.addAll(set);
arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list);
listView.setAdapter(arrayAdapter);
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
} else {
name.setError("Enter NAME");
}
}
});
}
}코드 핵심 로직 설명
코드의 핵심은 SortedSet set = new TreeSet() 부분입니다. TreeSet은 요소가 추가될 때마다 자동으로 사전순(오름차순) 정렬을 수행하며, 동일한 값의 중복 저장도 허용하지 않습니다.
- Save 버튼 클릭 시: 입력 필드가 비어 있지 않으면 해당 이름을 TreeSet에 추가하고, TreeSet의 전체 내용을 ArrayList로 복사한 뒤 ArrayAdapter를 통해 ListView에 바인딩합니다. 저장 성공 시 "Inserted" 토스트 메시지가 표시됩니다.
- 입력값이 비어 있는 경우: EditText에 "Enter NAME" 오류 메시지를 표시해 사용자에게 입력을 유도합니다.
- Refresh 버튼 클릭 시:
notifyDataSetChanged(),invalidateViews(),refreshDrawableState()를 호출하여 ListView를 강제로 다시 그려 최신 데이터를 반영합니다.
앱 실행 및 결과 확인
실제 안드로이드 기기를 컴퓨터에 연결한 상태에서 Android Studio 툴바의 Run 아이콘을 클릭하여 앱을 실행합니다. 실행 가능한 디바이스 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 앱의 기본 화면이 나타납니다.

위 실행 결과에서 확인할 수 있듯이, 사용자가 입력한 이름들은 TreeSet을 거치면서 자동으로 정렬된 상태로 ArrayList에 담기고, 이후 ListView에 순서대로 출력됩니다. 이처럼 SortedSet 인터페이스를 활용하면 별도의 정렬 로직 없이도 항상 정렬된 고유한 데이터 집합을 유지할 수 있습니다.