이 예제에서는 Android 앱이 처음 실행되는 것인지 아니면 이미 한 번 이상 실행된 적이 있는지를 프로그래밍 방식으로 판단하는 방법을 알아봅니다. 앱 최초 실행 여부를 확인하면 온보딩 화면 표시, 초기 설정 안내, 웰컴 메시지 출력 등 다양한 기능을 구현할 수 있습니다.
핵심 원리: SharedPreferences 활용
앱의 첫 실행 여부를 확인하는 가장 일반적인 방법은 SharedPreferences를 사용하는 것입니다. 앱이 처음 시작될 때 플래그(flag) 값을 저장해 두고, 이후 실행 시 해당 값이 존재하는지 검사하여 첫 실행인지 아닌지를 판별합니다.
1단계 — 새 프로젝트 생성
Android Studio에서 File → New Project로 이동한 후, 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.
2단계 — 레이아웃 파일 작성 (res/layout/activity_main.xml)
아래 코드를 activity_main.xml에 추가합니다.
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_height = "match_parent"
tools:context = ".MainActivity">
<TextView
android:id = "@+id/frstTime"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text = "Hello World!"
android:textSize = "30sp"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintLeft_toLeftOf = "parent"
app:layout_constraintRight_toRightOf = "parent"
app:layout_constraintTop_toTopOf = "parent" />
</android.support.constraint.ConstraintLayout>위 코드에서는 TextView 하나를 배치했습니다. 사용자가 애플리케이션을 열면 앱이 첫 실행인지 여부를 검사하고, 첫 실행이라면 TextView에 '첫 실행' 관련 문구를 표시하고, 그렇지 않다면 '첫 실행이 아님' 문구를 보여줍니다.
3단계 — 메인 액티비티 코드 작성 (src/MainActivity.java)
아래 코드를 MainActivity.java에 추가합니다.
package com.example.andy.myapplication;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
SharedPreferences sharedPreferences;
SharedPreferences.Editor sharedEditor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
sharedEditor = sharedPreferences.edit();
TextView frstTime = findViewById(R.id.frstTime);
if (isItFirestTime()) {
frstTime.setText("First Time");
} else {
frstTime.setText("Not a First Time");
}
}
public boolean isItFirestTime() {
if (sharedPreferences.getBoolean("firstTime", true)) {
sharedEditor.putBoolean("firstTime", false);
sharedEditor.commit();
sharedEditor.apply();
return true;
} else {
return false;
}
}
}코드 동작 방식 살펴보기
getPreferences(Context.MODE_PRIVATE)를 호출하면 해당 액티비티 전용의 private SharedPreferences 객체가 반환됩니다. isItFirestTime() 메서드는 "firstTime" 키의 boolean 값을 읽어오며, 기본값(default)은 true입니다. 즉, 저장된 값이 없다면 앱이 처음 실행된 것으로 간주합니다.
첫 실행으로 판별되면 즉시 firstTime 값을 false로 저장합니다. 이렇게 하면 다음번에 앱을 실행했을 때 저장된 값이 false이므로 '첫 실행이 아님'으로 처리됩니다.
참고: commit()과 apply()를 함께 호출할 필요는 없습니다. commit()은 동기적으로(즉시) 저장하고 결과를 반환하며, apply()는 비동기적으로 백그라운드에서 저장합니다. 일반적으로 UI 스레드 블로킹을 피하기 위해 apply() 하나만 사용하는 것이 권장됩니다.
애플리케이션 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 Android 모바일 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바에서 Run 아이콘을 클릭합니다. 옵션 목록에서 자신의 모바일 기기를 선택하면, 모바일 기기에 기본 화면이 표시됩니다.

사용자가 앱을 처음 열었을 때는 위와 같이 'First Time' 메시지가 표시되고, 그 이후에 앱을 다시 실행하면 아래와 같이 'Not a First Time' 메시지가 나타납니다.

마무리
이처럼 SharedPreferences에 플래그 값을 저장하는 간단한 방법만으로도 앱의 최초 실행 여부를 손쉽게 확인할 수 있습니다. 이 기법은 첫 실행 시에만 튜토리얼이나 사용자 동의 화면을 보여주거나, 초기 데이터를 설정하는 등의 시나리오에서 널리 활용됩니다.