[JAVA] static 필드

김규리·2026년 7월 14일

Java static

static이란?

static은 클래스(Class)에 속하는 변수나 메서드를 의미한다.

일반 변수(인스턴스 변수)는 객체마다 각각 생성되지만, static 변수는 클래스에 하나만 생성되어 모든 객체가 함께 공유한다.

특징

  • 클래스가 메모리에 로딩될 때 한 번만 생성된다.
  • 모든 객체(인스턴스)가 하나의 값을 공유한다.
  • 객체를 생성하지 않아도 클래스 이름으로 접근할 수 있다.
  • 공통으로 사용하는 값을 저장할 때 사용한다.

static 필드 정의

예를 들어 사람(Person) 객체가 생성될 때마다 생성된 사람 수를 세고 싶다면 static 변수를 사용할 수 있다.

public class PersonWithStatic {

    public static int count = 0;
    private String name;

    public PersonWithStatic(String name) {
        this.name = name;
        count++;
    }
}

코드 설명

  • count는 static 변수이므로 객체가 아닌 클래스에 하나만 존재한다.
  • 객체가 생성될 때마다 생성자에서 count++가 실행된다.
  • 따라서 생성된 객체의 개수를 쉽게 확인할 수 있다.

static 필드 접근

public class PersonWithStaticDemo {

    public static void main(String[] args) {

        System.out.println("객체 생성 이전 : " + PersonWithStatic.count);

        PersonWithStatic p1 = new PersonWithStatic("철수");
        PersonWithStatic p2 = new PersonWithStatic("영희");

        System.out.println("객체 생성 이후 : " + PersonWithStatic.count);

        System.out.println(PersonWithStatic.count);
    }
}

실행 결과

객체 생성 이전 : 0
객체 생성 이후 : 2
2

객체로 접근할 수도 있을까?

가능은 하지만 권장되지 않는다.

System.out.println(p1.count);

위 코드는 실행은 되지만 다음과 같은 경고가 발생한다.

"static 필드는 클래스 이름으로 접근하세요."

권장하는 방법은 다음과 같다.

System.out.println(PersonWithStatic.count);

즉, static은 객체가 아니라 클래스의 변수이므로 클래스 이름으로 접근하는 것이 올바른 방법이다.


static을 사용하는 이유

예를 들어 학생 객체를 100개 생성했다고 가정해 보자.

Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();

학생 수를 세는 변수(count)가 일반 변수라면 객체마다 따로 생성된다.

s1.count = 1
s2.count = 1
s3.count = 1

이렇게 되면 전체 학생 수를 알 수 없다.

하지만 static을 사용하면 하나의 변수를 모든 객체가 공유하므로,

Student.count = 3

처럼 전체 객체의 개수를 쉽게 관리할 수 있다.


일반 변수와 static 변수 비교

일반 변수(인스턴스 변수)static 변수(클래스 변수)
객체마다 생성된다.클래스에 하나만 생성된다.
객체마다 다른 값을 가진다.모든 객체가 같은 값을 공유한다.
객체를 생성해야 사용할 수 있다.객체 생성 없이 사용할 수 있다.
객체명으로 접근한다.클래스명으로 접근한다.

한 줄 정리

static 필드는 클래스에 하나만 생성되어 모든 객체가 공유하는 변수이다. 객체를 생성하지 않아도 클래스 이름으로 접근할 수 있으며, 공통으로 사용하는 데이터를 저장할 때 사용한다.

0개의 댓글