제어자(Modifier)는 클래스, 변수 혹은 메소드에서 사용이 되어 어떠한 의미를 부여해줍니다.

지난 포스팅의 4가지의 접근제어자들은 4가지 중 하나 이상은 같이 사용할 수 없습니다.

예를들어 public과 protected를 같이 사용은 못한다는 거죠.

하지만 제어자는 여러 제어자를 조합하는것이 가능합니다.


제어자는 여러가지 종류가 있는데요 그 중 static이라는 제어자에 대해 알아보려고 합니다.


static

먼저 static은 멤버변수, 메소드에 사용할 수 있습니다.

어디서 많이 보시지 않으셨나요 ㅎㅎ

우리가 메인클래스를 만들고 그 안에 메인메소드를 기억하시나요?


저기 빨간네모박스 부분에 사용되었던게 바로 제어자 입니다. 그 왼쪽엔 접근제어자 public이 위치해 있네요.


그리고~!!


클래스변수를 기억하시나요~?

제가 클래스변수, 인스턴스변수, 지역변수 이 세가지를 정리하면서 포스팅을 했었습니다.

[Java] 12. 클래스변수 / 인스턴스변수 / 지역변수 보러가기

여기서 제가 클래스변수는 class내부에 위치하며, static을 붙여준다고 했었습니다.

또한 이 static이 붙은 클래스변수는 모든 인스턴스가 같은 저장공간을 공유한다고 했었죠.

그렇습니다~

static은 "공통적인" 이라는 의미를 가지고 있습니다.

인스턴스변수는 각 인스턴스 마다 독립적인 저장공간을 가지고 있지만 클래스변수는 인스턴스에는 관계없이 같은 값을 가집니다.


StaticCheck.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.dreamstorage.modifier;
 
class Count{
    int num = 0;
    //static int num = 0;
    Count(){
        this.num++;
        System.out.println(this.num);
    }
}
public class StaticCheck {
    public static void main(String[] args) {
        Count cnt1 = new Count();
        Count cnt2 = new Count();
    }
}
cs


먼저 이것을 실행하여 결과를 보시고, 그 다음 4번라인을 주석처리하신후 5번라인 주석을 해제하신 다음 실행하여 보세요.


이번엔 그림으로 ~




정수형 변수 num이 인스턴스 변수일때 (4번라인 일떄)





정수형 변수 num이 클래스 변수(정적변수, 5번라인 일때)



그림과 같이 static을 붙였을 경우 그 변수는 모두 공유하게 됩니다.


그다음 static을 메소드에 사용할 경우는 클래스변수와 마찬가지로 인스턴스를 생성하지 않아도 호출이 가능하게 됩니다.

단, static메소드 안에서는 인스턴스멤버들을 직접 사용할 수는 없습니다.


제가 포스팅한 클래스변수에 대한 설명을 읽어보시면 크게 어렵지 않을 것 같습니다.