Static
- 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미
- static변수와 static메서드는 static메모리 영역에 존재하므로 객체가 생성되기 이전에 이미 할당
→ 따라서 객체(인스턴스)의 생성없이 바로 접근할 수 있음.

- Static 키워드를 통해 생성된 정적멤버들은 Static 영역(=메서드 영역=클래스 영역)에 생성되고, new 연산을 통해 생성한 객체는 Heap영역에 생성됨.
- Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 됨. 따라서 Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있음.
※ 가비지 컬렉터(Garbage Collector): 메모리가 부족할 때 유효하지 않은 메모리들을 정리해주는 프로그램
Static변수(클래스 변수)
- 클래스 내에서 static을 붙여서 선언하는 변수
- 객체를 생성하지 않고도 Static에 접근 가능
- 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수
Static메서드(클래스 메서드)
- 객체의 생성 없이 호출 가능
- 일반적으로 유틸리티 관련 함수들은 여러 번 사용되므로 static 메서드로 구현하는 것이 적합
ex. java.util.Math
클래스 메서드에 인스턴스 변수가 접근이 불가능한 이유
- 메모리 할당과 연관지어 생각
- 인스턴스 변수는 new 연산을 통해 객체가 생성된 후에 메모리가 할당된다.
- 하지만 static 메서드는 객체의 생성 없이 접근하는 함수이므로, 할당되지 않은 메모리 영역에 접근하므로 문제가 발생하게 됨.(static 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있음)
→ 따라서 static 메소드에서 접근하기 위한 변수는 반드시 static변수로 선언되어야 함.
참고
https://mangkyu.tistory.com/47
https://coding-factory.tistory.com/524