이유 : 공통으로 쓰기 위함.
메모리 관점 :
static 메소드와 static변수는 클래스 멤버라고 불림. 클래스에 고정된 멤버임. 인스턴스와 관계없다.
Static 영역에서 관리한다.
장점:
가비지 컬렉션의 관리 영역 밖임. -> 프로그램의 종료시까지 메모리가 할당된 채로 존재함.
단점:
너무 남발하면 시스템 성능에 악영향을 줄 수 있음.
코드 영역 살펴보자. 매~~번 헷갈리니까
static 영역 : 전역변수, static 멤버
heap 영역 : 객체, 인스턴스가 할당됨. new 연산자를 통해 , 이 heap 영역의 주소를 참조하는 값을 반환함!
stack 영역 : 기본 자료형 ( int, double, long , char ,boolean) 이 저장되는 곳 + 위에서 주소를 참조한 값같은 것이 들어감.
* String 은 기본자료형이 아니기에 heap 영역에 들어간다고 생각하면 된다!
+ int같은 기본자료형은 stack에 저장되기 때문에 JVM 에서 "직접참조" 를 하고,
Integer같은 wrapper type은 heap에 저장되기 때문에 JVM에서 "간접참조" 를 한다. (중간에 핸들메모리)
-> 자주 사용되는 변수나 객체가 있다면 직접참조가 더 빠름!
+
클래스 내 인스턴스 변수 가 필요 없다면 -> static 메소드를 사용하는걸 고려하기. ( 호출시간이 짧아짐)
'TIL' 카테고리의 다른 글
instanceof (0) | 2022.11.08 |
---|---|
Annotation이란? (0) | 2022.11.08 |
ER 다이어그램 정리 (0) | 2022.11.02 |
interceptor vs Filter (0) | 2022.10.27 |
Spring Security Form 인증 과정 (0) | 2022.10.26 |