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

Android에서 싱글톤 패턴으로 다이얼로그를 구현하는 방법

예제를 살펴보기 전에, 싱글톤(Singleton) 디자인 패턴이 무엇인지 먼저 이해할 필요가 있습니다. 싱글톤은 하나의 클래스에 대해 인스턴스 생성을 단 하나로 제한하는 디자인 패턴입니다. 대표적인 활용 사례로는 동시성(Concurrency) 제어와, 애플리케이션이 데이터 저장소에 접근할 수 있도록 중앙화된 접근 지점을 제공하는 것이 있습니다.

이번 예제에서는 Android에서 싱글톤 방식으로 다이얼로그를 사용하는 방법을 알아보겠습니다.

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">
   <Button
      android:id = "@+id/start"
      android:text = "start dialog in singleTone"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content" />
   <Button
      android:id = "@+id/end"
      android:text = "end dialog singleTone"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content" />
</LinearLayout>

위 코드에서는 두 개의 버튼을 배치했습니다. 사용자가 시작(start) 버튼을 클릭하면 프로그레스 다이얼로그가 표시되고, 종료(end) 버튼은 프로그레스 다이얼로그를 닫는 역할을 합니다.

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.Button;
public class MainActivity extends AppCompatActivity {
   Button start;
   singleTonExample singletonexample;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      start = findViewById(R.id.start);
      singletonexample = singleTonExample.getInstance();
      findViewById(R.id.end).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            singletonexample.dismiss();
         }
      });
      start.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            singletonexample.show(MainActivity.this);
         }
      });
   }
}

위 코드에서는 singleTonExample을 싱글톤 클래스로 사용했습니다. 이제 singleTonExample.java 파일을 생성하고 아래 코드를 추가합니다.

4단계: 싱글톤 클래스 작성

package com.example.andy.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.view.Window;
public class singleTonExample {
   private Dialog dialog;
   private static final singleTonExample ourInstance = new singleTonExample();
   public static singleTonExample getInstance() {
      return ourInstance;
   }
   private singleTonExample() { }
   public void show(Context context) {
      if (dialog != null && dialog.isShowing()) {
         return;
      }
      dialog = new Dialog(context);
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
      dialog.setContentView(R.layout.layout_progress_dialog);
      dialog.setCancelable(true);
      dialog.show();
   }
   public void dismiss() {
      if (dialog != null && dialog.isShowing()) {
         dialog.dismiss();
      }
   }
}

위 코드의 핵심 포인트는 다음과 같습니다.

  • private 생성자를 사용해 외부에서 인스턴스를 직접 생성하지 못하도록 막습니다.
  • 정적(static) 인스턴스를 미리 생성해 두고, getInstance() 메서드를 통해서만 접근할 수 있게 합니다.
  • show() 메서드에서는 이미 다이얼로그가 표시 중인 경우 중복 생성을 방지합니다.
  • dismiss() 메서드에서는 다이얼로그가 null이 아니고 표시 중일 때만 닫도록 안전성을 확보했습니다.

5단계: 다이얼로그 레이아웃 작성

위 코드에서 다이얼로그의 콘텐츠 뷰를 지정했으므로, res 폴더에 layout_progress_dialog.xml 레이아웃 파일을 생성하고 아래 내용을 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   android:orientation = "vertical"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   android:gravity = "center">
   <ProgressBar
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content"
      android:id = "@+id/progress" />
</LinearLayout>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 모바일 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭합니다. 모바일 기기를 실행 대상으로 선택하면, 모바일 기기에 기본 화면이 표시됩니다.

Android에서 싱글톤 패턴으로 다이얼로그를 구현하는 방법

이제 싱글톤으로 다이얼로그 표시 버튼을 클릭하면, 싱글톤 클래스로부터 다이얼로그가 아래와 같이 나타나는 것을 확인할 수 있습니다.

Android에서 싱글톤 패턴으로 다이얼로그를 구현하는 방법

이처럼 싱글톤 패턴을 활용하면 애플리케이션 전체에서 단 하나의 다이얼로그 인스턴스만 유지할 수 있어, 중복 생성을 방지하고 메모리 사용을 효율적으로 관리할 수 있습니다. 특히 로딩 상태 표시와 같이 여러 화면에서 공통으로 사용되는 다이얼로그를 구현할 때 매우 유용한 패턴입니다.