class Method라고도 한다.
메서드 앞에 static이 붙어있으면 '클래스 메서드'이고 그렇지 않으면 '인스턴스 메서드'다. 이전 static 변수에서 그랬듯 static메서드도 마찬가지로 객체생성을 하지 않고도 사용이 가능하다!
반대로 인스턴스 변수와 인스턴스 메서드는 꼭 객체생성을 해야만 사용을 할 수 있다.
class Pen {
static String color = "검정색"; // static변수
String kind; // 인스턴스 변수
static void draw1() { // static 메서드
System.out.println(color+"펜을 이용해 그리는 중");
}
void draw2() { // 인스턴스 메서드
System.out.println(kind +"펜을 이용해 그리는 중");
}
}
class Drawing {
public static void main(String[] args) {
System.out.println(Pen.color); // 객체생성없이 변수 사용가능
Pen.draw1(); // 객체생성없이 변수 사용가능
System.out.println(Pen.kind); // 오류 발생
Pen.draw2(); // 오류 발생
// 위의 인스턴스 변수와 인스턴스 메서드는 객체를 생성하지 않고
// 바로 사용하면 오류가 발생하므로 아래와 같이 객체를 생성해야 한다.
Pen p = new Pen(); // 객체 생성
p.kind = "형광펜";
System.out.println(p.kind);
p.draw2();
}
}
static을 붙인 변수는 저장공간을 공유하므로 해당 변수는 모든 객체에게 같은 값을 부여할 수 있다. 이처럼 모두 같아야 하는 변수나 메서드 앞에는 static을 붙여 한 번에 정의하는 것이 좋다.
static변수는 객체 생성을 하지 않고도 호출이 가능하다.
이 말은 호출이 되었을 때 객체가 없을 수도 있다는 뜻이다. 이 때문에 static 메서드 내에서는 인스턴스 변수와 인스턴스의 메서드 사용이 불가하다. 오류 발생!
따라서 메서드를 작성한 후 해당 메서드 내부에 인스턴스 변수를 사용하지 않는다면 staitc을 붙인다.