static의 경우 클래스가 메모리에 로딩되기전 이미 정적변수와 정적메소드를 위한 메모리 공간(Method Area)이 할당되므로 객체가 생성될때마다 메모리 공간이 할당되지 않는다.
첫째로, static을 쓴 변수나 메소드는 객체생성없이 모든 객체가 아무런 제약없이 공유할수 있다. 물론 객체생성하고 써도 상관없다.
둘째로, static을 쓴 변수는 값을 공유하므로 연속적으로 그 값의 흐름을 이어갈수 있다는 것이다.
JVM은 static으로 선언한 놈을 딱한번 메모리를 할당함.
Static 메서드에는 인스턴스 변수가 올 수 없다 당연하다. 스태틱 메서드는 인스턴스를 생성안하고도 호출할 수 있으니까
Main 메서드는 static인 이유 : 누군가 호출하기 전에 실행되어야 한다. 즉, 메모리에 올라가 있어야 한다. JVM이 로딩되자마자 실행시키는 것은 main 메소드
즉 setData안의 지역변수는 메서드가 끝나면 변수는 지워지지만 static은 유지
Static 초기화블럭 : 생성자로 생성을 하면 객체를 생성할 때 마다 객체가 생성되나, 초기화블럭을 사용하면 최초생성시 1회 생성되며, 그 자원은 재사용된다.
Static은 세션 등 상태를 저장, 혹은 변경하지 않는 방식으로 사용됨
'스프링' 카테고리의 다른 글
[java] IOC_오브젝트팩토리 (0) | 2020.10.10 |
---|---|
[java] 추상화 인터페이스(클래스분리 리팩토링) (0) | 2020.10.06 |
[java] 클래스분리(상속을 통한 확장 리팩토링) (0) | 2020.10.06 |
[자바 상속] extends 확장 (0) | 2020.10.02 |
[토비] 초난감DAO 메소드 추출기법 (0) | 2020.09.24 |