Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android CopyOnWriteArraySet에서 addAll() 사용하는 방법 (단계별 예제)

CopyOnWriteArraySet란?

본격적인 예제에 앞서 CopyOnWriteArraySet가 무엇인지 간단히 짚고 넘어가겠습니다. CopyOnWriteArraySet는 java.util.concurrent 패키지에 포함된 스레드 안전(thread-safe) Set 구현체입니다. 내부적으로 CopyOnWriteArrayList를 기반으로 하며, add(), set() 같은 수정 작업이 일어날 때마다 기존 배열을 복사해 새 배열을 만드는 'copy-on-write' 방식으로 동작합니다. 덕분에 여러 스레드가 동시에 접근하더라도 데이터가 깨지지 않고, 반복(iteration) 도중에도 ConcurrentModificationException 없이 안전하게 사용할 수 있습니다.

이 글에서는 Android에서 CopyOnWriteArraySet의 addAll() 메서드를 활용해 여러 요소를 한 번에 추가하는 방법을 단계별로 알아보겠습니다.

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:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <TextView
        android:id="@+id/actionEvent"
        android:textSize="40sp"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</LinearLayout>

위 코드에서는 CopyOnWriteArraySet의 요소를 화면에 출력하기 위해 TextView 하나를 배치했습니다.

3단계 – MainActivity.java 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다.

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.Arrays;
import java.util.concurrent.CopyOnWriteArraySet;

public class MainActivity extends AppCompatActivity {
   CopyOnWriteArraySet<String> copyOnWriteArraySet;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      copyOnWriteArraySet = new CopyOnWriteArraySet<>();
      final TextView actionEvent = findViewById(R.id.actionEvent);
      copyOnWriteArraySet.add("sai");
      copyOnWriteArraySet.add("ram");
      copyOnWriteArraySet.add("krishna");
      copyOnWriteArraySet.add("prasad");
      copyOnWriteArraySet.add("ram"); // 중복 요소는 저장되지 않음
      actionEvent.setText("" + copyOnWriteArraySet);
      actionEvent.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            String[] strings = {"satish", "shiva"};
            copyOnWriteArraySet.addAll(Arrays.asList(strings));
            actionEvent.setText("" + copyOnWriteArraySet);
         }
      });
   }
}

앱 실행 및 결과 확인

실제 Android 기기를 컴퓨터에 연결했다고 가정하고 애플리케이션을 실행해 보겠습니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 후 툴바의 Run 아이콘을 클릭하고, 목록에서 자신의 모바일 기기를 선택하세요. 그러면 아래와 같은 기본 화면이 표시됩니다.

Android CopyOnWriteArraySet에서 addAll() 사용하는 방법 (단계별 예제)

이제 화면의 TextView를 클릭하면 addAll() 메서드에 의해 새로운 요소들이 추가된 결과가 아래와 같이 나타납니다.

Android CopyOnWriteArraySet에서 addAll() 사용하는 방법 (단계별 예제)

마무리

addAll() 메서드를 사용하면 컬렉션에 담긴 여러 요소를 한 번에 CopyOnWriteArraySet에 추가할 수 있습니다. 또한 Set의 특성상 중복 요소는 자동으로 걸러지기 때문에, 예제에서 'ram'을 두 번 추가했지만 실제로는 한 번만 저장된 것을 확인할 수 있습니다. 멀티스레드 환경에서 안전한 집합(Set) 처리가 필요하다면 CopyOnWriteArraySet를 적극적으로 활용해 보시기 바랍니다.