모든 Employee 객체는 인스턴스 변수인 id를 각자 보유한다. 하지만 lastId 변수는 오직 하나다. lastId 변수는 클래스의 특정 인스턴스가 아니라 클래스 자체에 속한다.
새 Employee 객체를 생성하면 공유된 lastId 변수가 증가하고, 인스턴스 변수 id가 증가한 값으로 설정된다. 따라서 모든 직원 객체가 유일한 id 값을 얻는다.
Caution
여러 스레드가 Employee 객체를 동시에 생성하면 이 코드는 제대로 작동하지 않는다. 10장 병행 프로그래밍에서 이 문제를 해결하는 방법을 자세히 설명한다.
Note ≣
왜 개별 인스턴스가 아니라 클래스에 속하는 변수를 ‘정적(static)’이라고 하는지 궁금할 것이다. 이 용어는 C++에서 유래한 의미 없는 유물이다. C++는 그저 더 적절한 용어를 제시하지 못해 C 언어에서 관련 없는 키워드를 따온 것뿐이다. 의미를 더 적절하게 드러내는 용어는 ‘클래스 변수’다.