[Java] static 변수2

코드 속의 "진돌"·2024년 2월 20일
0
post-thumbnail

✅ static 변수 사용


특정 클래스에서 공용으로 함께 사용할 수 있는 변수를 만들 수 있다면 편리할 것이다.
static 키워드를 사용하면 공용으로 함께 사용하는 변수를 만들 수 있다.

✏️ Data3

package static1;

public class Data3 {
  public String name;
  public static int count;  // static

  public Data3(String name) {
    this.name = name;
    count++;
  }
}
  • static int count 부분을 보면 변수 타입(int) 앞에 static 키워드가 붙어있다.
  • 멤버 변수에 static을 붙이게 되면 static 변수, 정적 변수 또는 클래스 변수라 한다.
  • 객체가 생성되면 생성자에서 정적 변수 count의 값을 하나 증가시킨다.



✏️ DataCountMain3

package static1;

public class DataCountMain3 {

  public static void main(String[] args) {
    Data3 data1 = new Data3("A");
    System.out.println("A count = " + Data3.count);

    Data3 data2 = new Data3("B");
    System.out.println("B count = " + Data3.count);

    Data3 data3 = new Data3("C");
    System.out.println("C count = " + Data3.count);
  }
}

코드를 보면 count 정적 변수에 접근하는 방법이 조금 특이한데 Data3.count와 같이 클래스명에 .(dot)을 사용한다. 마치 클래스에 직접 접근하는 것처럼 느껴진다.



🖥️ 실행 결과



⚙️ 실행 과정

  • static이 붙은 멤버 변수는 메서드 영역에서 관리한다.
    • static이 붙은 멤버 변수 count는 인스턴스 영역에 생성되지 않는다. 대신 메서드 영역에서 이 변수를 관리한다.
  • Data3(”A”) 인스턴스를 생성하면 생성자가 호출된다.
  • 생성자에는 count++ 코드가 있다. countstatic이 붙은 정적 변수다. 정적 변수는 인스턴스 영역이 아니라 메서드 영역에서 관리한다. 따라서 이 경우 메서드 영역에 있는 count의 값이 하나 증가된다.

  • Data3(”B”) 인스턴스를 생성하면 생성자가 호출된다.
  • count++ 코드가 있다. countstatic이 붙은 정적 변수다. 메서드 영역에 있는 count 변수의 값이 하나 증가된다.

  • Data3(”C”) 인스턴스를 생성하면 생성자가 호출된다.
  • count++ 코드가 있다. countstatic이 붙은 정적 변수다. 메서드 영역에 있는 count 변수의 값이 하나 증가된다.

최종적으로 메서드 영역에 있는 count 변수의 값은 3이 된다.

static이 붙은 정적 변수에 접근하려면 Data3.count와 같이 클래스명 + .(dot) + 변수명으로 접근하면 된다. 참고로 Data3의 생성자와 같이 자신의 클래스에 있는 정적 변수라면 클래스명을 생략할 수 있다.

static 변수를 사용한 덕분에 공용 변수를 사용해서 편리하게 문제를 해결할 수 있다.



📚 정리

static 변수는 쉽게 이야기해서 클래스인 붕어빵 틀이 특별히 관리하는 변수이다. 붕어빵 틀은 1개이므로 클래스 변수도 하나만 존재한다. 반면에 인스턴스 변수는 붕어빵인 인스턴스의 수 만큼 존재한다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글