어제 오늘 내일

[Java] static 변수와 static 메서드 차이 본문

IT/Java

[Java] static 변수와 static 메서드 차이

hi.anna 2025. 12. 25. 08:54

 

Java에서 static 키워드는 클래스 수준에서 공유되는 멤버를 정의할 때 사용됩니다.
static 변수와 static 메서드는 모두 객체가 아닌 클래스 자체에 소속되지만, 두 개념은 용도와 동작 방식에서 차이가 있습니다.
이 글에서는 static 변수와 static 메서드의 차이를 명확하게 정리합니다.

 

1. static 변수 (클래스 변수)

static 변수가 선언되면, 해당 변수는 모든 객체가 공유하는 하나의 값만 존재합니다.
클래스가 메모리에 로드될 때 단 한 번 생성됩니다.

예제

class Counter {
    static int count = 0;  // static 변수
    int id;

    Counter() {
        count++;
        id = count;
    }
}

사용:

Counter c1 = new Counter();
Counter c2 = new Counter();

System.out.println(c1.id); // 1
System.out.println(c2.id); // 2
System.out.println(Counter.count); // 2

특징

  • 모든 객체가 같은 count 변수를 공유
  • 클래스명으로 직접 접근 가능
  • 객체 생성 없이 사용할 수 있음

 

2. static 메서드 (클래스 메서드)

static 메서드는 객체 생성 없이 호출 가능한 메서드입니다.
객체 상태(instance field)에 접근할 수 없고, 오직 static 변수 또는 전달받은 매개변수만 사용할 수 있습니다.

예제

class MathUtil {
    static int add(int a, int b) {
        return a + b;
    }
}

사용:

int result = MathUtil.add(3, 5);

특징

  • 객체 없이 호출 가능
  • 인스턴스 변수 사용 불가
  • 보통 유틸리티 기능 제공 시 사용

 

3. static 변수와 static 메서드의 차이

구분 static 변수 static 메서드

구분 static 변수 static 메서드
소속 클래스 클래스
생성 시점 클래스 로딩 시 클래스 로딩 시
사용 목적 데이터 공유 객체 없이 기능 제공
인스턴스 정보 접근 가능(단, 공유됨) 불가능
호출 방식 클래스명.변수 클래스명.메서드

핵심 차이

  • static 변수 = 데이터를 공유하기 위해 사용
  • static 메서드 = 객체 없이 실행할 기능을 제공하기 위해 사용

 

4. static 메서드에서 인스턴스 변수 사용 불가

class Test {
    int value = 10;

    static void printValue() {
        // System.out.println(value); // ❌ 컴파일 오류
    }
}

왜?
static 메서드는 객체와 무관하게 호출되기 때문에 객체에 속한 변수를 사용할 수 없음

 

5. static 변수 + static 메서드 함께 사용 예

class Logger {
    static int count = 0;

    static void log(String msg) {
        count++;
        System.out.println("[" + count + "] " + msg);
    }
}

Logger.log("start");
Logger.log("loading");

출력:

[1] start
[2] loading

설명

  • count는 로그 횟수를 모든 곳에서 공유
  • log()는 클래스 메서드이므로 객체 없이 호출

 

6. 언제 static을 사용할까?

static 변수

  • 모든 객체가 공유해야 하는 값이 있을 때
  • 설정값, 카운트 값, 상수 값 등

static 메서드

  • 유틸리티 메서드 (Math, Arrays…)
  • 객체의 상태와 관계없는 기능 제공할 때
  • 인스턴스 생성이 불필요한 기능

7. 정리

  • static 변수는 하나의 값을 여러 객체가 공유
  • static 메서드는 객체 없이 호출 가능한 함수
  • static 메서드는 인스턴스 변수나 메서드에 접근할 수 없음
  • 클래스 기반 데이터/기능을 다룰 때 static을 사용하면 효율적

 

 

반응형
Comments