클래스를 사용해 객체를 생성하면 객체마다 자신의 필드를 가진다.
각 객체는 독립적이고 다른 기억 공간을 사용한다. 다른 개체에게 영향을 주지 않는다.
같은 클래스의 객에끼리 공유해야할 데이터가 필요한 경우가 발생한다.
모든 객체가 공유할 수 있는 변수가 있어야 한다.
이때 사용하는 것이 static 키워드이다.
static 키워드를 사용하면 클래스의 필드를 공유할 수 있다. = 정적변수(static variable) = 클래스 변수(class variable)
static 키워드를 사용하지 않은 필드는 공유되지 않고 인스턴스마다 자신의 필드를 생성한다. = 인스턴스 변수(instance variable)
인스턴스 변수는 객체별로 관리된다. 객체를 생성할 때 인스턴스 변수도 생성하므로 객체를 생성한 후에야 접근할 수 있음, 객체가 소멸될 때 자동으로 소멸된다. 객체를 여러개 생성하면 인스턴스 변수도 여러 개 생성된다.
정적 변수는 클래스 로더가 클래스를 메서드 영역에 적재할 때 생성하므로객체 생성 전에도 접근할 수 있다. 객체를 여러 개 생성해도 정적 변수는 하나 뿐이며 모든 객체가 공유한다.
※ 주의사항
객체와 관련된 인스턴스 변수를 사용할 수 없다.
객체와 관련된 인스턴스 메서드를 호출할 수 없다.
객체 자신을 가리키는 this 키워드를 사용할 수 없다.