[JAVA] static 키워드 이해하기

haaaalin·2021년 12월 20일
0
post-thumbnail

static 키워드란?

객체는 생성될 때마다 객체마다 변수를 각각 가지고 있습니다.

만약에, 모든 객체들이 공유해야 하지만, 각 객체마다 가지고 있을 필요는 없는 변수를 사용해야 한다면?

이런 경우에는 각 객체마다 변수를 선언해 주기에는 불필요하게 메모리를 사용하게 됩니다 또, 각 객체마다 선언한 그 변수의 값을 증가시켜야 한다면? 모든 객체에 있는 변수들을 다 증가시켜 주어야합니다. 어떻게 공유성 & 메모리 효율성의 문제를 해결할 수 있을까요? 이때, static 변수를 사용하는 방법이 바로 해결 방법입니다. 예를 들어 봅시다.

static 변수가 필요한 경우

🔔 코드

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();
    }
}


📝 설명

위 코드는 조회수를 측정하는 프로그램이라고 가정합니다. main 함수 에서 보면, Counter 객체를 2개 생성하고 있습니다. 결과는 어떻게 될까요?

📤 결과

위 코드를 실행한 결과는

1
2

이와 같습니다. c1, c2 객체 생성시 생성자에서 static 변수인 count 의 값을 1씩 증가했더니, c1과 c2의 count 값이 공유(같은 메모리 주소를 바라보기 때문)되어 방문자수가 증가되어 출력됩니다.

이렇게 변수에 static 키워드를 붙이면, 아무리 객체를 많이 생성해도, 딱 한 번만 메모리 할당을 해주게 됩니다.


⭐ 변수의 `static` 키워드는 보통 프로그래밍 시 메모리의 효율보다는 공유의 목적으로 훨씬 더 많이 사용한다고 합니다.

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 method 안에서는 객체변수 접근이 불가능합니다. static 메소드에서는 오로지 static 변수만!!

🔑 오늘 살펴봤던 static 변수와 static 메소드는 객체를 생성하지 않고도 클래스의 이름으로 호출할 수 있습니다. ex) Counter.getCount()

🔑 그리고 이 시리즈의 다른 글에서 볼 수 있는 싱글톤 패턴에서 static 키워드는 아주 중요한 역할을 하는 친구입니다.



🔎 참고

profile
한 걸음 한 걸음 쌓아가자😎

0개의 댓글