About java static

프로그램이 시작되는 시점에 클래스 로더가 클래스를 해서갛여 메소드 영역 혹은 힙 영역에 클래스 메타 데이터 및 정적 변수 등을 적재.

static 저장 위치

java8 이전에는 메소드 영역인 Permanent 영역, Java8 이후에는 힙 영역에 저장

static을 사용하는 경우

  • 상수 정의
  • 유틸리티 클래스 정의

static을 지양해야하는 이유

  • 메모리 문제 : 프로그램 실행 시점에 메모리에 할당, 대부분 종료 시점까지 메모리에서 해제되지 않는다.
  • 동시성 이슈 문제 : 전역 접근이 가능
  • 런타임 다형성 불가 : 객체, 메소드로 바로 접근하여 호출
  • 객체의 상태를 이용 불가 : 필요로 하는 인자를 외부에서 주입해야 한다. 정적 메소드 안에는 클래스의 인스턴스 필드를 사용할 수 없다. 정적 메소드 안에서는 정적 변수만 사용.
  • 테스트하기 어려움


출처

https://steady-coding.tistory.com/603