Java의 static 키워드는 클래스 내부의 필드, 메서드 또는 중첩 클래스에 적용됩니다. static 멤버는 클래스 수준의 멤버로, 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 접근할 수 있습니다
1. Static 변수 (클래스 변수):
static 변수는 클래스 수준에서 하나의 인스턴스만 공유합니다. 모든 인스턴스가 이 변수를 공유하며, 인스턴스 생성 없이도 클래스 이름을 통해 접근 가능합니다.
예를 들어, 모든 인스턴스에서 공통으로 사용하는 상수나 설정 값을 저장할 때 사용됩니다.
static 변수는 클래스가 로드될 때 초기화되며, 클래스 내에서 모든 인스턴스 간에 동일한 값을 갖습니다.
2. Static 메서드:
static 메서드는 인스턴스를 생성하지 않고도 클래스 이름을 통해 호출할 수 있는 메서드입니다.
주로 유틸리티 메서드나 공통 동작을 수행하는 메서드로 사용됩니다.
static 메서드 내에서는 인스턴스 변수에 접근할 수 없습니다.
3. Static 블록:
static 블록은 클래스가 로드될 때 실행되는 코드 블록입니다.
주로 클래스 초기화 로직이나 리소스 로딩에 사용됩니다.
4. Static 중첩 클래스:
클래스 내부에 또 다른 클래스를 정의할 수 있으며, 그 중첩 클래스를 static으로 정의하면 외부 클래스의 인스턴스 없이도 사용할 수 있습니다.
주로 헬퍼 클래스나 데이터 컨테이너로 사용됩니다.
static 멤버는 객체가 아닌 클래스 자체에 속하므로, 객체를 생성하지 않고도 사용할 수 있으며, 메모리 공간을 공유합니다. 그러나 주의할 점은 static 멤버는 인스턴스 멤버에 비해 메모리 사용량이 작지만, 공유되는 데이터이므로 조심히 사용해야 합니다. 또한, static 멤버는 다형성에 영향을 주지 않으므로 주로 클래스 수준의 작업을 위해 활용됩니다.
Java에서 static과 대조되는 개념은 instance 또는 non-static입니다. static 멤버와 instance 멤버(또는 non-static 멤버)는 서로 다른 특징을 가지고 있습니다.
Static (클래스 멤버):
static 멤버는 클래스 수준에 속하며, 클래스가 로드될 때 초기화됩니다.
클래스 이름을 통해 접근하며, 모든 인스턴스가 이를 공유합니다.
주로 클래스 수준의 작업을 위해 사용됩니다. 예를 들어, 유틸리티 메서드, 클래스 변수 등이 있습니다.
Instance (인스턴스 멤버 또는 non-static 멤버):
instance 멤버는 개별 객체(인스턴스)에 속하며, 객체가 생성될 때 초기화됩니다.
객체를 통해서만 접근할 수 있으며, 각 인스턴스는 독립된 값을 가집니다.
주로 객체의 상태를 나타내는 필드와 해당 객체에 대한 동작을 정의하는 메서드에 사용됩니다.
주의사항 : 정수 데이터형 int와 인스턴스 int는 다르다.
Java에서 int와 인스턴스 변수로 선언된 int는 다른 것입니다. 이 둘은 데이터 유형과 사용 방법이 다릅니다.
int (기본 자료형):
int는 Java의 기본 자료형 중 하나로, 정수 값을 저장하는 데 사용됩니다.
int 변수는 일반적으로 지역 변수 또는 메서드의 매개변수로 선언됩니다.
int 변수는 프리미티브(원시) 데이터 타입으로, 값을 직접 저장합니다.
따라서 객체가 아닌 단순한 데이터를 나타냅니다.
인스턴스 int (클래스 멤버):
인스턴스 변수로 선언된 int는 클래스 내부에 선언되지만 객체(인스턴스)마다 독립적인 값을 가집니다. 객체를 생성할 때마다 각 객체에 대해 인스턴스 변수가 별도의 메모리 공간에 생성됩니다. 이러한 인스턴스 변수는 객체의 상태를 나타내는 데 사용됩니다.