JAVA/JAVA 개념정리

Static 개념

공부 기록장 2023. 7. 3. 22:37

static 변수란 정적변수라고도 한다. (프로그램이 실행될 때 생성되며 프로그램이 종료될 때 사라진다.)

→즉 객체가 사라져도 사라지지 않는다.

 

non-static 멤버는 객체가 생길 때 객체마다 생기며 다른 객체들과 공유하지 않는다.
하지만 static 멤버는 객체를 생성하지 않고도 사용할 수 있으며 다른 객체들과 공유한다.

 

 

static 선언 방법은 다음과 같다.

class StaticSample {
    int n;                   //non-static 필드
    void g() {...}           //non-static 필드
    
    static int m;            //static 필드
    static void f() {...}    //static 필드
    
}

 

 

 


다음은 코드를 통해 직접 알아보는 과정이다.

 

다음과 같이 StaticSample1 클래스의 객체를 생성하지도 않았는데 static 변수인 hello1이 출력된 것을 알 수 있다.

 

 

 

→ 반 면 non-static인 hello2 변수는 객체가 생성되지 않았기 때문에 오류가 나는 것을 확인할 수 있다.

 

 

 

→ static 메소드 또한 객체 생성 전에 호출이 되는 것을 확인할 수 있다.

 

 

 

→ hello1 변수는 class 이름인 StaticSample1 과 객체 이름인 asset 을 통해 호출하여도 출력되지만 

    hello2 변수는 객체 이름인 asset 만을 통해 호출해야 출력되기에

 

  static 멤버는 클래스멤버라고도 부르며

  non-static 멤버는 인스턴스 멤버라고도 불린다.  (인스턴스 = 객체)

 

 

→ 다음 코드를 통해 서로 다른 객체인 asset 과 dif 객체는 non-static인 hello2 변수는 각각 서로 다른 메모리 공간을 사용하기 때문에 다른 문장이 출력되는 것을 알 수 있으며 static 인 hello1 변수는 같은 메모리 공간을 사용하기 때문에 asset.hello1 = "asset static" 코드로 값을 변경 후에  dif.hello1 = "dif static" 코드로 값을 변경하면 마지막으로 바꾼 문장인 dif static이 출력되는 것을 알 수 있다.

 

 

 

 

 

 

결론 : static 은 동일한 클래스의 모든 객체들에 의해 공유되게 하는 예약어이다.