JAVA

static

Dexlee 2022. 4. 23. 21:11

1. static 특징

  • 반드시 메모리(data 영역)에 올라간다.
  • GC 대상이 아니다. : 바로 이점을 활용해야 static 사용에 큰 이점을 얻을 수 있다.
  • 그래서 여러 개의 인스턴스(객체)를 만들더라도 그 스태틱 영역은 같은 주소에 존재하는 값을 참조한다.
  • 이때, 같은 JVM에서만 해당된다. 만약 다른 JVM에서 생성된 static 변수는 다른 주소나 다른 값을 참조한다.
  • 자주 사용하고 절대 변하지 않는 변수는 static final을 사용하면 GC 대상이 되지 않아 성능상 이점이 있다.
  • 설정  파일 정보도 static으로 관리하면 좋다. 왜냐하면 클래스의 객체를 생성할 때 마다 설정 파일을 로딩하면 엄청난 성능 저하가 발생한다.

2. JVM 간의 상이한 결과가 나오는 것을 방지하기 위한 해결책

memcached, EhCache 등 캐시를 사용

 

2. static 블록

  • 클래스의 객체가 생성되면서 딱 한 번만 호출되는 블록(최초 로딩될 때)

 

3. static 함수 사용 이유?

  • 메서드를 사용할 때, 객체를 해당 로직에 직접 생성하지 않고 메서드에 접근할 수 있어서 결합도를 낮출 수 있다.(의존성을 낮춘다)
  • GC 대상이 아니다. 즉, 자주 사용하는 함수를 static으로 놓으면 성능에 큰 이점이 있다.
  • 단점으로는 함수 내부에서 클래스 변수(static)만 사용할 수 있다.
  • 즉, static이 아닌 변수 이름은 static context에서 참조할 수 없다.

4. static 사용 예?

  • connectionpool에서 connection 객체를 미리 만들어 놓고 사용한다.
  • 즉, GC 대상이 되지 않는데, static을 사용해서 그렇다.