Activity.finish()란 무엇인가?
안드로이드에서 finish() 메서드는 현재 실행 중인 액티비티(Activity)를 종료하고, 시스템이 관리하는 백 스택(back stack)에서 해당 액티비티를 제거하는 역할을 합니다. finish()가 호출되면 액티비티는 화면에서 사라지고 onDestroy() 라이프사이클 콜백이 실행되며, 사용자는 이전에 표시되던 화면(홈 화면 또는 이전 액티비티)으로 되돌아가게 됩니다.
이 글에서는 간단한 두 개의 액티비티 예제를 통해 finish() 메서드가 실제로 어떻게 작동하는지 단계별로 살펴보겠습니다.
Step 1 — 새 프로젝트 생성
Android Studio에서 File → New Project를 선택한 뒤, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
Step 2 — activity_main.xml 레이아웃 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면에는 안내 문구를 보여주는 TextView와 다음 액티비티로 이동하는 Button이 배치됩니다.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Main Activity!" android:layout_marginTop="25sp" android:textSize="25dp" android:padding="15dp" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="Next Activity" /> </RelativeLayout>
Step 3 — MainActivity.java 구현
src/MainActivity.java에 다음 코드를 작성합니다. 핵심은 버튼 클릭 리스너 안에서 startActivity()로 새 액티비티를 시작한 직후 finish()를 호출한다는 점입니다. 이렇게 하면 MainActivity는 새 액티비티가 열리는 즉시 종료되어 백 스택에서 제거됩니다.
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String action;
Intent intent = new Intent(MainActivity.this,NewActivity.class);
startActivity(intent);
finish();
}
});
}
}Step 4 — 새 액티비티 추가 및 레이아웃 작성
프로젝트 탐색기에서 패키지를 마우스 오른쪽 버튼으로 클릭한 뒤, New → Activity → Empty Activity를 선택하여 새 액티비티를 생성합니다. 액티비티 이름을 지정한 후 res/layout/activity_new.xml에 아래 코드를 입력합니다.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".NewActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Activity!" android:textStyle="bold" android:textColor="@color/colorAccent" android:layout_marginTop="25sp" android:textSize="25dp" android:padding="15dp" /> </RelativeLayout>
Step 5 — NewActivity.java 작성
새로 만든 NewActivity.java에 다음 코드를 입력합니다.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class NewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
}
}Step 6 — AndroidManifest.xml 등록
생성한 NewActivity를 매니페스트에 반드시 등록해야 합니다. androidManifest.xml에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".NewActivity"></activity> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
앱 실행 및 결과 확인
실제 안드로이드 기기를 컴퓨터에 연결한 상태에서 앱을 실행해 보겠습니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 실행 대상으로 자신의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 기본 화면이 표시됩니다.


버튼을 눌러 NewActivity로 이동한 상태에서 뒤로 가기(Back) 버튼을 누르면 finish() 메서드가 호출되어 현재 액티비티가 소멸(destroy)되고 홈 화면으로 돌아갑니다. 아래 세 번째 이미지에서 그 결과를 확인할 수 있습니다.

finish() 동작 정리
- finish() 호출 시점: startActivity() 직후 finish()를 호출하면 새 액티비티가 열리는 동시에 기존 액티비티가 종료됩니다.
- 백 스택 제거: 종료된 액티비티는 백 스택에서 제거되므로, 뒤로 가기 버튼을 눌러도 해당 화면으로 다시 돌아올 수 없습니다.
- 라이프사이클: finish()가 호출되면 onPause() → onStop() → onDestroy() 순으로 콜백이 진행되며 액티비티가 완전히 소멸됩니다.
참고로 위 예제에서 사용된 android.support.v7.app.AppCompatActivity는 구버전 지원 라이브러리입니다. 최신 프로젝트에서는 AndroidX의 androidx.appcompat.app.AppCompatActivity를 사용하는 것이 권장됩니다. finish()의 동작 원리 자체는 동일하게 적용됩니다.