Post

Java - static 키워드에 대해 알아보자.

Java - static 키워드에 대해 알아보자.

static 키워드

static이란 인스턴스를 직접 생성하지 않고도 접근이 가능한 상태를 만들도록 하는 키워드이다.

static 키워드의 특징은 아래와 같다.

  • 클래스가 처음 참조될 때 JVM이 로딩하고 static 키워드가 붙은 요소는 메서드 영역(static 영역)에 올라가짐
  • 인스턴스를 생성하지 않아도 접근 가능
  • 공유 자원으로 동작함 (모든 인스턴스가 같은 값 공유)

이러한 특성 때문에 주로 Util 메서드, 상수 선언에 사용된다.

static 예시 1

1
2
3
4
5
6
7
public class ExampleUtils{
  public static void checkNull(Integer number){
    if(number == null){
      throw new RuntimeException("값이 null입니다.");
    }
  }
}

static 예시 2

1
2
3
public interface Constants{
  public static final String CONSTANT_VALUE = "Hello";
}

인터페이스의 변수는 무조건 public static final이 붙기 때문에 생략할 수 있다.

static 사용 예시

1
2
3
4
public static void main(String[] args){
  ExampleUtils.checkNull(1);
  System.out.println(Constants.CONSTANT_VALUE);
}

static 키워드에 단점

static 키워드에 단점으로는 아래와 같다.

  • static 변수나 메서드는 클래스가 처음 참조될 때 JVM의 메서드 영역에 올라가며 일반적인 GC 대상은 아님
    • JVM이 종료되거나 클래스 언로딩이 발생하면 제거됨
  • 잘못 사용하면 메모리를 계속 점유하여 메모리 누수의 원인이 될 수 있음
  • 모든 인스턴스가 동일한 static 값을 공유하므로 멀티스레드 환경에서 동기화 문제가 발생할 수 있음
  • 테스트나 의존성 주입이 어려워 객체지향 설계 원칙(SRP, DIP 등)을 위반하기 쉬운 구조가 될 수 있음
This post is licensed under CC BY 4.0 by the author.