클래스 공유 값과 변경 불가능한 참조를 구분합니다.
static 멤버는 인스턴스가 아니라 클래스에 하나만 존재합니다. final 변수는 한 번만 대입할 수 있고 static final 상수는 클래스 전체에서 공유됩니다.
createdCount는 static이라 객체마다 따로 생기지 않고 Course 클래스에 하나만 있으므로, 생성자가 두 번 실행되면서 같은 변수가 0에서 2로 늘어납니다. main은 만든 객체를 변수에 담지 않았는데도 Course.createdCount()처럼 클래스 이름으로 정적 메서드를 불러 2를 얻습니다. 필드와 메서드가 같은 이름 createdCount를 써도 Java는 둘을 따로 찾기 때문에 충돌하지 않습니다.
final 참조가 가리키는 변경 가능한 객체 내부는 여전히 바뀔 수 있습니다. 진정한 불변 객체는 상태 자체와 외부 노출을 함께 설계해야 합니다.
공유 static 변경 상태는 테스트와 동시 실행을 어렵게 하므로 상수와 순수한 유틸리티 외에는 신중히 사용합니다.
모든 메서드와 필드를 static으로 만들면 객체별 상태와 다형성을 사용할 수 없습니다.
직접 바꿔보세요최대 강의 수 상수로 생성자 입력을 제한하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.