본문 바로가기
카테고리 없음

자바 static의 의미와 사용법

by sftt 2023. 12. 27.

자바 static의 의미와 사용법

자바에서 static은 특정한 의미와 개념을 나타내며, 클래스의 멤버나 메소드에 사용됩니다. static은 다음과 같은 의미와 특징을 가지고 있습니다.

1. 클래스 레벨의 속성이나 메소드

static 키워드가 변수나 메소드 앞에 붙게 되면, 해당 변수나 메소드는 클래스 레벨의 속성이나 메소드로 동작합니다. 즉, 인스턴스를 생성하지 않아도 클래스 자체에서 접근이 가능합니다.

2. 객체의 생성 없이 사용 가능

static 멤버는 클래스의 로딩될 때 메모리에 할당되기 때문에, 인스턴스를 생성하지 않고도 직접 클래스 이름으로 접근하여 사용할 수 있습니다. 따라서 static 멤버는 인스턴스의 생성 불필요한 기능을 구현할 때 유용합니다.

3. 공유 변수 또는 메소드

static 변수는 객체 간의 데이터를 공유하는 데 사용될 수 있습니다. 객체를 생성하여 해당 변수를 수정하거나 사용할 필요 없이, 클래스에 속한 static 변수를 통해 데이터를 주고 받을 수 있습니다. 마찬가지로, static 메소드는 인스턴스별이 아닌 클래스 자체에서 호출되기 때문에, 많은 객체들이 공유하는 동일한 동작을 구현할 때 유용합니다.

4. 메모리 효율

static 멤버는 메모리에 단 한 번만 할당되므로, 메모리 사용량 측면에서 효율적입니다. 인스턴스별로 변수를 만들 필요 없이 static 멤버를 활용하여 메모리 사용을 최소화할 수 있습니다.

사용법

1. static 변수

static 변수를 선언하려면 변수 선언 앞에 static 키워드를 붙이면 됩니다. 일반적으로 클래스 내의 어떤 메소드에서도 접근 가능한 클래스 레벨의 변수를 만들 때 사용합니다. static 변수는 인스턴스가 생성되기 전에 초기화되며, 클래스 메모리에 딱 한 번 할당됩니다.

public class MyClass {
    static int myStaticVariable;

    public static void main(String[] args) {
        MyClass.myStaticVariable = 10;
    }
}

2. static 메소드

static 메소드를 선언하려면 메소드 선언 앞에 static 키워드를 붙이면 됩니다. static 메소드는 클래스 레벨에서 호출되며, 인스턴스 생성 없이 사용 가능합니다. static 메소드 내에서는 인스턴스 변수에 접근할 수 없으므로, 주로 인스턴스와 관련 없는 일반적인 동작에 사용됩니다.

public class MyClass {
    static void myStaticMethod() {
        System.out.println("This is a static method.");
    }

    public static void main(String[] args) {
        MyClass.myStaticMethod();
    }
}

3. static 블록

static 블록은 static 변수를 초기화하거나 static 메소드를 실행하기 위한 코드 블록입니다. 클래스가 로딩될 때 한 번 실행되며, static 블록에 작성된 내용이 실행됩니다.

public class MyClass {
    static int myStaticVariable;

    static {
        myStaticVariable = 10;
        System.out.println("Static block executed.");
    }

    public static void main(String[] args) {
        System.out.println("Value of myStaticVariable: " + MyClass.myStaticVariable);
    }
}

위의 코드에서 `Static block executed.`가 출력될 것입니다.

결론

static은 자바에서 클래스 레벨의 멤버를 나타내며, 객체의 생성 없이 사용 가능합니다. static 멤버는 클래스의 데이터를 공유하는 데 유용하며, 메모리 사용을 효율적으로 할 수 있는 장점이 있습니다. static 변수, static 메소드, 그리고 static 블록을 사용하여 개발 시 편리하고 효율적인 코드를 작성할 수 있습니다.

댓글