Language/JAVA

[JAVA] static 변수와 메서드

gangintheremark 2023. 7. 24. 11:27
728x90

static

static 은 정적, 고정된이란 의미이다. static 키워드를 이용해 static 변수와 static 메서드를 생성할 수 있는데 이를 정적 멤버 (=클래스멤버)라고 한다. static 키워드를 통해 생성된 정적 멤버들은 heap 영역이 아닌 static 영역에 생성된다. static 영역에 할당된 메모리는 모든 객체가 공유할 수 있다.

객체 생성 시 할당된 heap영역의 메모리는 Garbage Collector를 통해 관리를 하지만 static 영역에 할당된 메모리는 관리 영역 밖에 존재하므로 static을 자주 사용하면 프로그램의 종료 시까지 메모리가 할당된 채로 존재한다.

 ✨  특징

  • 프로그램 실행 시 생성되어 종료 시 소멸
  • 단 한 번만 생성
  • 클래스명으로 접근 가능
  • 자동초기화
  • 여러 인스턴스가 공유하는 경우 사용
class Calculator {
    public static String appName = "Calculator"; // static 변수, 프로그램 실행할 때 한 번 생성
    public String date = "230718"; // 인스턴스 변수, 객체 생성할 때마다 매번 생성

    public static int add(int x, int y) {
        return x+y;
    }

    public int sub(int x, int y) {
        return x-y;
    }

}
public class Main {

    public static void main(String[] args) {
        System.out.println(Calculator.appName); 
        // static 메소드 이므로 객체 생성 없이 클래스명으로 접근 가능

        System.out.println(Calculator.date); // error
        // static 메소드가 아니므로 객체 생성 후에 사용 가능

        System.out.println(Calculator.add(2,3)); 
        // static 메소드이므로 객체 생성 없이 클래스명으로 접근 가능

        System.out.println(Calculator.sub(5,3)); // error
        // static 메소드가 아니므로 객체 생성 후에 사용 가능

        Calculator c = new Calculator();
        c.add(2, 3); // O 가능은 하지만 권장X
        c.sub(5, 3); // O 객체 생성 후 접근

    }
}
728x90