1. 정적 멤버와 static 개념
- static 키워드는 클래스에 속하는 멤버(변수, 메소드, 블록)를 만들 때 사용한다.
- 정적 멤버(Static Member)는 클래스가 로드될 때 메모리에 단 한 번 생성되고, 인스턴스(객체)를 생성하지 않고도 사용할 수 있다.
- 인스턴스별로 다른 값을 가지는 멤버가 아닌, 모든 객체가 공유하는 공통된 멤버라고 생각하면 된다.
2. 정적 멤버 선언
class Example {
static int staticVar = 10; // 정적 변수 (클래스 변수)
int instanceVar = 5; // 인스턴스 변수
}
- staticVar는 클래스에 속하며, 객체 생성 없이 접근 가능
- instanceVar는 객체마다 별도로 존재함.
3. 정적 멤버 사용
클래스가 메모리에 로딩되면 정적 멤버를 바로 사용할 수 있는데, 클래스 이름과 함께 도트 연산자로 접근하면 됨.
public class Main {
public static void main(String[] args) {
System.out.println(Example.staticVar); // 객체 생성 없이 사용 가능
Example ex1 = new Example();
Example ex2 = new Example();
ex1.instanceVar = 7; // ex1의 인스턴스 변수 값 변경
ex2.instanceVar = 9; // ex2의 인스턴스 변수 값 변경
ex1.staticVar = 20; // staticVar는 모든 객체가 공유하므로 값 변경 시 모두에게 영향
System.out.println(Example.staticVar); // 20
System.out.println(ex2.staticVar); // 20 (ex2로 접근해도 클래스 변수에 접근하는 것)
}
}
- 정적 멤버는 객체 생성 없이 클래스명으로 바로 접근하는 것이 일반적
- 정적 변수는 모든 인스턴스가 공유
4. 정적 초기화 블록(static initializer block)
- 정적 멤버를 초기화할 때 복잡한 작업이 필요하면 정적 초기화 블록을 사용할 수 있다.
- 클래스가 메모리에 처음 로드될 때 딱 한 번 실행된다.
class Example {
static int staticVar;
static {
staticVar = 100;
System.out.println("Static 초기화 블록 실행");
}
}
- 위 블록은 클래스 로딩 시 실행되어 staticVar를 초기화
- 정적 초기화 블록에서는 연산을 사용하여 초기화할 수 있
5. 정적 메소드와 블록 선언 시 주의할 점
- 정적 메소드와 정적 블록은 객체 생성 없이 실행된다는 특징 때문에 주의가 필요함
- 인스턴스가 생성되기 전에 실행되므로:
- 인스턴스 필드(변수)를 사용할 수 없다.
- 인스턴스 메소드를 호출할 수 없다.
- this 키워드를 사용할 수 없다.
- 정적 메소드 및 정적 블록 내부에서는 정적 멤버(정적 변수, 정적 메소드)만 사용 가능하다.
class Example {int instanceVar = 10;static int staticVar = 20;
static void staticMethod() {// System.out.println(instanceVar); // 오류: 인스턴스 필드 사용 불가// instanceMethod(); // 오류: 인스턴스 메소드 사용 불가// System.out.println(this.staticVar); // 오류: this 사용 불가
System.out.println(staticVar); // 정적 변수 사용 가능staticMethod2(); // 정적 메소드 호출 가능}
static void staticMethod2() {System.out.println("Static method 2 실행");}
void instanceMethod() {System.out.println("Instance method 실행");}}
정적 메소드와 정적 블록에서 인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성하고 참조 변수로 접근해야함
6. 싱글톤 패턴과 static
- 싱글톤(Singleton) 패턴은 클래스의 인스턴스가 딱 한 개만 생성되도록 보장하는 디자인 패턴
- 주로 정적 변수(static field)에 인스턴스를 저장하고, 정적 메소드로 접근하는 방식으로 구현된다.
- 자세한 내용은 다음 글에서..
'Study > Java' 카테고리의 다른 글
| 싱글톤(Singleton) (0) | 2025.07.08 |
|---|---|
| 인스턴스 멤버와 this (0) | 2025.07.08 |
| 접근제어자 (0) | 2025.07.08 |
| 상속(Inheritance)와 다형성(Polymorphism) (0) | 2025.07.07 |
| 캡슐화(Encapsulation) (0) | 2025.07.06 |