특정 클래스에서 고용으로 함께 사용할 수 있는 변수를 만들 수 있다면 편하게 사용할 수 있을 것이다.
static 키워드를 사용하면 공용으로 함께 사용하는 변수를 만들 수 있다.
public class Data {
public String name;
public static int count;
public Data(String name) {
this.name = name;
count++;
}
}
public class Main {
Data data1 = new Data("A");
System.out.println("A count = " + Data.count);
Data data2 = new Data("B");
System.out.println("B count = " + Data.count);
Data data3 = new Data("C");
System.out.println("C count = " + Data.count);
}
결과
A count = 1
B count = 2
C count = 3


이 과정을 한번 더 반복해 count 변수의 값은 3이 된다.
public class DecoUtil {
public static String deco(String str) {
String result = "*" + str + "*";
return result;
}
}
메서드 앞에 static이 붙어있다. 이렇게 하면 정적 메서드를 만들 수 있다. 이 정적 메서드는 정적 변수처럼 인스턴스 생성 없이 클래스 명을 통해서 바로 호출할 수 있다.
public class Main {
public static void main(String[] args) {
String s = "hello java";
String deco = DecoUtil.deco(s);
System.out.println("before: " + s);
System.out.println("after: " + deco);
}
}
실행결과
before: hello java
after: *hello java*
static 메서드는 static 변수와 마찬가지로 클래스를 통해 바로 접근할 수 있고, 인스턴스를 통해서도 접근할 수 있다.
import static을 통해서 클래스명을 생략하고 메서드를 사용할 수 있다.
정적 메서드에서는 인스턴스 메서드 또는 변수가 생성되기 전에 생성되기 때문에 정적 변수 또는 정적 메서드만 사용할 수 있다. (파라미터로 주입하면 사용할 수 있다.)