728x90

static 변수에 대해 알아보자.


- 클래스의 변수나 메소드는 해당 클래스가 인스턴스화 되기 전에는 사용할 수 없다.

  하지만 static 변수나 메소드는 인스턴스의 생성과 상관없이(즉, 객체를 생성하지 않고도)

  바로 접근이 가능하고, 사용이 가능하다.

- public 으로 선언되면 누구나 어디서든 접근이 가능하다.

- JVM 은 실행과정에서 필요한 클래스의 정보를 메모리에 로딩한다.
  이 로딩(Loading) 시점에서 static 변수가 초기화된다.

- static 메소드는 해당하는 객체를 생성하지 않고도 해당 메소드를 호출하기 위한 것이다.


class AAA {
    static int num1 = 0;
    public AAA(){
        num1++;
        System.out.println("값="+ num1);
    }
}

class BBB {
    public static void main(String[] args){
        AAA aaa1 = new AAA();
        AAA aaa2 = new AAA();
        AAA aaa3 = new AAA();
    }


위 예제에서 static int num1 으로 선언된 변수는 Class AAA 에 종속될까? 안될까?

static 으로 선언된 변수는 Class AAA 에 포함되지 않는 변수다. 즉, 어떤 객체에도 포함되지 않으며 항상 값이 유지되도록 하는 변수이다.

그러므로 Class BBB에서 실행된 결과는 1, 2, 3 으로 증가된다.


값이 항상 고정적으로 이용해야 될 경우에는 final static 으로 선언해서 이용한다.

final static int MaxSpeed = 300; // 최대 스피드

final static int MinSpeed = 0; // 최저 스피드



Android 생명주기에서 onDestroy()가 호출되면 해당 Activity가 종료된다.

static 변수는 Android 생명주기와 상관없이, 해당 Process가 종료되어야 메모리에서 자유로워진다.

하지만, Android 에서는 어플의 Process를 가능한 한 유지하기 위해 노력하고 있다. 극단적인 메모리 부족현상이 발생하기 전에는 한번 실행된 어플의 Process 는 거의 죽지 않는다고 보면 된다.

View 처리를 하는 변수에 static을 잘못 사용하면 전혀 엉뚱한 결과나 오동작이될 수 있다는 것이 이해되는가?


Activity 생명주기(life cycle)와는 전혀 상관이 없고 Process가 종료되는 시점에 초기화된다.

Android 에서는 static 변수 사용은 정말 조심해야 한다는 걸 명심하자.


'안드로이드 > Java 문법' 카테고리의 다른 글

java Singleton Design Pattern  (0) 2018.09.24
[Java] instanceof 연산자  (0) 2017.10.24
[Java] 정보은닉과 캡슐화  (0) 2017.10.16
자바 기본 데이터형과 크기  (0) 2017.10.11
Java 클래스(Class) ★★★★★  (0) 2017.05.04
블로그 이미지

Link2Me

,