-
자바 static변수, 메서드Java 2023. 4. 18. 21:28
개발을 하다보면 변수나 메서드 앞에 static이라는 것을 가끔 확인해 볼 수 있습니다.
그렇다면, 일반적으로 사용하는 방식과 static을 붙여 사용하는 것은 어떤 것이 다를까?
검색을 하며 찾아보면, "정적"이라는 단어가 보이는데, 개인적으로는 100% 이해하기 힘들어 "정적"이라는 표현은 최대한 줄여 설명할 예정입니다.
우선, static 변수나 메서드는 메모리의 static영역에 할당됩니다.
* 참고 : 기본 자료형 변수는 stack영역 / 참조형 변수는 heap영역에 할당됩니다.
그렇다면 static영역에 변수나 메서드가 할당된다는 것은 어떤 것을 의미할까?
- 자바의 가비지컬렉터가 관여를 하지 않으며, 모든 객체가 메모리를 공유할 수 있는 것을 의미합니다.
- 가비지 컬렉터가 관여하지 않기 때문에 자주 사용하는 것은 성능에 나쁜 영향을 줄 수 있다고 생각합니다.
그렇다면, 예시를 보면서 설명 드리겠습니다.
* static 변수

static 변수 예시 왜 ic.num은 값이 변하지 않고, ic.idx만 변할까??
static 변수는 static영역에 할당되어 객체가 메모리를 공유하고, 일반 변수는 stack영역에 할당되어 값만 복사하는 것입니다.
stack영역에 할당된 ic.num과 changeIc.num은 다른 변수입니다.
하지만, static영역에 할당된 ic.idx는 메모리 주소 값을 changeIc.idx와 공유합니다. 그렇기 때문에 다른 객체가 선언되어도 메모리를 공유하고 있어, 값이 변경될 수 있는 것입니다.
* static 메서드

static 메서드 예시 static 메서드의 특징으로는 객체를 선언하지 않고도 바로 사용할 수 있습니다.
그 이유는 static이 붙으면 클래스가 로드될 때 바로 로드되기 때문입니다. 그로 인해 객체를 선언하지 않고 바로 사용할 수 있습니다.
반면에, 일반 메서드는 객체를 호출해야 사용할 수 있습니다.
출처
https://wikidocs.net/228
https://coding-factory.tistory.com/524'Java' 카테고리의 다른 글
자바 compareTo 문자, 숫자 비교 (0) 2023.04.26 자바 Arrays.sort 사용하기(String[], int[] Integer[]) / Collections.reverseOrder() (0) 2023.04.23 자바 call by value, call by reference (0) 2023.04.17 자바 문자열 대소문자 전환 (0) 2023.03.15 자바 substring, split 사용하기 (0) 2023.03.15