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

안드로이드 스튜디오에서 정적(Static) 변수를 사용하는 방법과 활용 위치

이 글에서는 안드로이드 스튜디오(Android Studio)에서 정적(static) 변수를 어떻게, 그리고 어디에 사용하는지 단계별 예제를 통해 알아보겠습니다.

정적 변수란 무엇인가?

정적 변수는 클래스 자체에 귀속되는 변수로, 객체(인스턴스)를 생성하지 않고도 클래스 이름을 통해 직접 접근할 수 있습니다. 모든 인스턴스가 하나의 값을 공유하기 때문에 상수 정의, 로그 태그(TAG), 전역 설정값 저장 등에 널리 활용됩니다.

1단계 — 새 프로젝트 생성

안드로이드 스튜디오를 실행한 뒤 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:layout_height="match_parent"
    tools:context="MainActivity">
    <TextView
        android:id="@+id/Question"
        android:layout_width="wrap_content"
        android:layout_height="93dp"
        android:padding="8dp"
        android:text="I'm a Static Variable"
        android:layout_marginTop="32sp"
        android:layout_marginLeft="8dp"
        android:textSize="32dp"
        tools:layout_editor_absoluteY="8dp" />
</LinearLayout>

3단계 — MainActivity 작성

다음 코드를 src/MainActivity.java에 추가합니다.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
    public static final String TAG = "I'm a Static Variable";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
    }
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
    }
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }
}

여기서 핵심은 바로 이 한 줄입니다.

public static final String TAG = "I'm a Static Variable";

TAGpublic(어디서든 접근 가능), static(객체 없이 클래스 단위로 존재), final(값 변경 불가) 키워드가 조합된 대표적인 정적 상수입니다. 액티비티의 생명주기 메서드인 onStart(), onPause(), onStop()에서 로그캣(Logcat)에 로그를 기록할 때 이 TAG를 그대로 재사용합니다. 이렇게 하면 문자열을 여러 곳에서 반복 선언할 필요 없이 한 곳에서 관리할 수 있어 유지보수가 쉬워집니다.

4단계 — 매니페스트 수정

다음 코드를 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=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. 안드로이드 스튜디오에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하세요. 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 기본 화면이 표시됩니다.

안드로이드 스튜디오에서 정적(Static) 변수를 사용하는 방법과 활용 위치

또한 안드로이드 스튜디오 하단의 Logcat 창을 열면, TAG로 지정한 "I'm a Static Variable"과 함께 onStart, onPause, onStop 로그가 액티비티 상태 변화에 따라 순서대로 출력되는 것을 확인할 수 있습니다.

정적 변수를 활용하면 좋은 경우

  • 로그 태그(TAG)처럼 앱 전역에서 공유되는 상수
  • 버전 정보, API 주소 등 변경되지 않는 설정값
  • 유틸리티 클래스의 공유 카운터나 간단한 캐시

다만 주의할 점도 있습니다. 정적 변수에 액티비티나 컨텍스트(Context) 참조를 담으면 가비지 컬렉션이 되지 않아 메모리 누수(memory leak)가 발생할 수 있습니다. 따라서 정적 변수에는 변경되지 않는 값이나 경량 데이터만 저장하는 것이 좋습니다.