
✅ static이 붙은 변수나 메서드는 인스턴스(객체) 없이 클래스 자체의 소속
✅ static이 없는 건 객체가 생성되어야만 사용할 수 있는 인스턴스 소속
class Dog {
String str; // 인스턴스 변수
public static void bark1(String s) {
System.out.println(s);
}
public void bark2() {
System.out.println(this.str);
}
}
public class Main {
public static void main(String[] args) {
// 클래스 메서드는 객체 없이 바로 호출 가능
Dog.bark1("woof"); // OK
// 객체 없이 인스턴스 메서드 호출은 불가능
// Dog.bark2(); // ❌ 에러
// 객체 생성 후 인스턴스 변수, 메서드 접근 가능
Dog d = new Dog();
d.str = "woof";
d.bark2(); // OK
// d.bark1(); // 가능은 하지만 권장되지 않음 (static은 클래스 이름으로 호출하는 게 명확)
}
}
static 변수는 모든 객체가 공유하는 하나의 값!
만약 static 없이 변수를 만들면, 각 객체가 자기만의 값을 가진다
class Dog {
static int count = 0; // 모든 Dog 객체가 공유
public Dog() {
count++; // 객체가 만들어질 때마다 증가
}
}
//count가 static이 아니면 각 Dog마다 count = 1이 됨
//static으로 선언하면 전체 Dog의 생성 수를 셀 수 있다
static: 클래스 소속 (공용)
인스턴스 변수/메서드: 객체가 있어야만 사용 가능
클래스 메서드는 클래스명.메서드()로 호출하는 것이 좋음
static 변수는 여러 객체가 공유해야 할 값에 사용