🔖 INDEX
static 키워드란?
자바에서 static 키워드는 클래스 레벨에서 공유되는 필드, 메서드, 블록, 내부 클래스 등에 사용되며, 객체의 인스턴스가 아닌 클래스 자체에 속하는 멤버를 정의할 때 사용됩니다. 즉, 모든 인스턴스가 동일한 static 멤버를 공유하게 됩니다.
static 키워드의 주요 활용법
static 변수 (클래스 변수)
모든 인스턴스가 공유하는 변수로, 클래스 로딩 시 한 번만 생성됩니다.
class Counter {
static int count = 0; // 모든 객체가 공유하는 변수
Counter() {
count++; // 객체가 생성될 때마다 증가
}
void printCount() {
System.out.println("현재 count 값: " + count);
}
}
public class StaticVariableExample {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
c1.printCount(); // 출력: 현재 count 값: 3
}
}
주의점: static 변수는 모든 인스턴스가 공유하기 때문에, 동기화 없이 여러 스레드에서 접근하면 동시성 문제가 발생할 수 있습니다.
static 메서드 (클래스 메서드)
객체 생성 없이 호출할 수 있는 메서드로, static 변수만 접근 가능합니다.
class MathUtil {
static int square(int x) {
return x * x;
}
}
public class StaticMethodExample {
public static void main(String[] args) {
int result = MathUtil.square(5); // 객체 생성 없이 호출
System.out.println("5의 제곱: " + result); // 출력: 5의 제곱: 25
}
}
주의점: static 메서드는 인스턴스 변수나 인스턴스 메서드를 직접 참조할 수 없습니다. 따라서, 내부에서 this 키워드를 사용할 수 없습니다.
static 블록 (정적 초기화 블록)
클래스가 로딩될 때 한 번 실행되며, static 변수를 초기화하는 데 주로 사용됩니다.
class DatabaseConfig {
static String URL;
static {
URL = "jdbc:mysql://localhost:3306/mydb";
System.out.println("데이터베이스 URL 설정 완료");
}
}
public class StaticBlockExample {
public static void main(String[] args) {
System.out.println("DB URL: " + DatabaseConfig.URL);
}
}
주의점: static 블록은 클래스가 처음 로딩될 때 한 번만 실행됩니다. 따라서 복잡한 초기화 작업을 수행하면 애플리케이션 시작 속도가 느려질 수 있습니다.
static 내부 클래스
정적 내부 클래스는 외부 클래스의 인스턴스 없이 사용 가능합니다.
class OuterClass {
static class StaticNestedClass {
void display() {
System.out.println("정적 내부 클래스의 메서드 실행");
}
}
}
public class StaticNestedClassExample {
public static void main(String[] args) {
OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
nested.display();
}
}
주의점: 정적 내부 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 없습니다.
static 키워드 사용 시 주의점
- 메모리 사용 문제: static 변수는 프로그램 종료 시까지 메모리에 유지되므로, 불필요한 사용은 메모리 누수를 초래할 수 있습니다.
- 동시성 문제: 여러 스레드가 static 변수를 동시에 수정하면 데이터 불일치 문제가 발생할 수 있으므로, 동기화 처리가 필요합니다.
- 인스턴스 멤버 접근 제한: static 메서드는 인스턴스 변수를 직접 사용할 수 없기 때문에, 객체 지향적인 설계에서 static 사용을 신중히 해야 합니다.
결론
자바의 static 키워드는 적절히 사용하면 메모리 사용을 최적화하고 객체 생성 없이도 기능을 제공하는 강력한 도구가 될 수 있습니다. 하지만 과도한 사용은 유지보수성과 확장성을 저해할 수 있으므로, 주의해서 사용해야 합니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
초보 자바 프로그래밍(61) - final 키워드의 활용과 주의점 (0) | 2025.03.26 |
---|---|
초보 자바 프로그래밍(59) - this 키워드와 생성자 체이닝 (0) | 2025.03.24 |
초보 자바 프로그래밍(58) - Thread 동기화 (0) | 2023.10.04 |
초보 자바 프로그래밍(57) - Thread (0) | 2023.10.03 |
초보 자바 프로그래밍(56) - Exception Handling (try-catch-finally, throws) (0) | 2023.10.03 |
댓글