WEB/JAVA / / 2021. 9. 18. 15:44

[JAVA] static 변수와 static 메소드

static은 보통 변수, 메서드 앞에 사용합니다.

static 변수 (정적 변수)


메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수

1) 메모리의 효율 증가

아래 예제를 살펴보자.

public class StoreChoi{
	static String lastname = "최";
    
    public static void main(String[] args){
    	StoreChoi store1 = new StoreChoi();
    	StoreChoi store2 = new StoreChoi();
    }
}

위와 같이 lastname 변수에 static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 된다.

따라서 메모리 사용에 이점을 볼 수 있다.

(여기서 만약 static 키워드 앞에 final 키워드를 붙인다면 한번 설정 된 후 그 값을 변경하지 못하게 하는 기능이 있다.

 

2) 공유하기 위한 용도

public class Counter  {
    static int count = 0;
    Counter() {
        this.count++;
        System.out.println(this.count);
    }

    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
    }
}

결과값

int count = 0 앞에 static 키워드를 붙였더니 count 값이 공유되어서 위와 같은 결과값이 나왔다.

자바에서 static 변수는 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 변수로, 메모리에 한번 할당되므로 여러 객체가 해당 메모리를 공유하게 된다.

 

static 메소드 (정적 메소드)


static method는 객체의 생성 없이 호출이 가능하며, 객체에서는 호출이 가능은 하지만 사용을 지양하고 있다.

아래 예제를 살펴보자.

public class Counter  {
    static int count = 0;
    Counter() {
        this.count++;
    }

    public static int getCount() {
        return count;
    }

    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();

        System.out.println(Counter.getCount());
    }
}

위에 코드에서 getCount() 는 static 메소드이다.

따라서 main 메소드에서 getCount() 메소드는 객체 생성 없이 Counter.getCount() 와 같이 클래스를 통해 호출할 수 있게 된다.

 

※ 스태틱 메소드 안에서는 인스턴스 변수 접근이 불가능 하다. (예제에서는 count가 static 변수이기 때문에 접근 가능)

 

보통 static 메소드는 유틸리티 성 메소드를 작성할 때 많이 사용된다. 

ex) java.uitl.Math 클래스, java.util.Date 클래스 등

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유