Java

[Java] static

비번변경 2026. 4. 28. 11:05

개요

2026.04.22-[Java] 접근 제어자에 이어서 오늘도 변수나 함수 앞에 위치할 수 있는 키워드 중 하나인 static에 대해서 알아보고자 한다.

 

 

static

'고정된'이라는 의미를 가지며, Java에서는 static 키워드를 사용해 static 변수와 static 메서드를 만들 수 있다. 정적 변수, 정적 메서드라고도 하는데 둘을 묶어 정적 멤버, 클래스 멤버라고 말하기도 한다. 정적 멤버는 객체가 아닌 클래스에 고정된 멤버로, 클래스 로더가 클래스를 메모리 영역에 적재할 때 클래스 별로 관리한다. 클래스 로딩이 끝나면 바로 사용할 수 있다.

 

 

정적 멤버 생성

static 키워드로 생성된 정적 멤버는 Heap이 아닌 Static 영역에 할당된다. static 영역은 모든 객체가 공유하고 있어 어디서든 멤버를 참조할 수 있다는 장점을 가지지만 garbage collector 관리 영역 밖에 존재하고 있어 프로그램 종료 시까지 메모리 할당 상태를 유지하며 존재한다.

 

 

정적 멤버 선언

필드, 메서드 생성할 때 공용으로 사용할지 아닐지에 따라 정적으로 생성할지 말지 결정한다. 그냥 생성하면 인스턴스로 생성하며, 정적으로 생성할 때는 static 키워드를 붙여준다.

static int num = 0;
public static void static_method(){}

 

 

예시

정적 필드

Number라는 클래스에 정적 필드 num과 인스턴스 필드 num2가 있다고 하자.

그리고 Number 객체 number1, number2를 선언하고 number1의 필드만 값을 1씩 증가시킨 후, number2의 필드에 영향을 주었는지 확인해본다. 

class Number{
    static int num = 0; //클래스 필드
    int num2 = 0; //인스턴스 필드
}

public class Static_ex {

    public static void main(String[] args) {
        Number number1 = new Number();
        Number number2 = new Number();

        System.out.println(Number.num);

        // number1 필드 값 변경
        number1.num++;
        number1.num2++;
        // number2 필드 값 확인
        System.out.println(number2.num);
        System.out.println(number2.num2);
    }
}

확인해 보면 number2의 클래스 필드 num은 영향을 받았지만, 인스턴스 필드인 num2는 영향을 받지 않았다.

이렇게 정적 필드는 모든 객체가 공유하는 자원일 때 활용할 수 있다.

또한 클래스가 메모리에 올라갈 때 생성되므로 인스턴스를 선언하지 않아도 클래스 필드를 사용할 수 있기도 하다.

 

정적 메서드

정적 메서드도 정적 필드와 동일하게 클래스가 메모리에 올라갈 때 생성되므로 인스턴스 생성 없이 바로 호출할 수 있다. 때문에 유틸리티 함수를 만들 때 유용하다.

class Name{
    static void print() { //클래스 메소드
        System.out.println("내 이름은 홍길동입니다.");
    }

    void print2() { //인스턴스 메소드
        System.out.println("내 이름은 이순신입니다.");
    }
}

public class Static_ex {

    public static void main(String[] args) {
        Name.print(); //인스턴스를 생성하지 않아도 호출이 가능

        Name name = new Name();
        name.print2(); //인스턴스를 생성하여야만 호출이 가능
    }
}

 

 

참고 문서

https://coding-factory.tistory.com/524

 

 

728x90