이번엔 static 변수에 대해 알아보려고 한다.
아예 몰랐던 지식은 아니지만 정확히는 어떤 역할을 하는지 알지 못하는 거 같아서 정리하게 됬다.
대충 메소드나 변수를 만들 때 쓰이고 메모리는 고정되지만 값만 바뀌게 할 수 있는 키워드라 생각하고 있었다.
하지만 정확히 설명하자면
메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수를 static 변수라고 말한다.
이해를 돕기위한 예제를 가져와보자면
public class Member {
private String name = "BB_GG";
}
다음과 같은 클래스가 있을 때,
이 클래스를 통해 다른 클래스에서 n개의 Member를 생성하면 "BB_GG"라는 값을 가지는 메모리가 n개가 생겨버린다,
이는 메모리 효율에 매우 좋지않은 방법이므로 이를 해결하기 위해서 아래와 같이 static을 사용하는 것이다.
public class Member {
public static final String name = "BB_GG";
}
다음과 같이 사용하게 되면 n개의 Member를 생성하게되어도 똑같은 메모리에서 값을 참조해 쓰기 때문에 메모리 효율에 도움이 된다.
그렇다면 메소드에 static이 붙는 경우는 무엇인가 알아보겠다.
static이 붙은 메소드는 객체의 생성없이 호출이 가능해지는데 이게 무슨 소리냐하면
public class Member {
public static final String name = "BB_GG";
public static void print_mem(){
System.out.println(name);
}
}
public class Main {
public static void main(String[] args) {
Member.print_mem();
}
}
"BB_GG" 라는 값을 얻을 수 있다.
정리해보자면
static 이라는 키워드는 메모리 효율에 있어서 도움을 줄 수 있고, 유틸리티 관련 메소드들을 활용할 때 적합하다는 결론을 내릴 수 있다.
*** 더 알아두면 좋은 지식
1)
메모리의 영역에는 static 영역과 heap 영역이 존재하는데,
heap 영역은 Garbage Collection 이라고 하는 최적화 방법을 통해 관리 받는 반면, static 영역은 그 반대이다.
static 이라는 키워드를 통해 우리는 모든 객체가 공유할 수 있게 되지만, 이는 Garbage Collection 의 관리 영역 밖에 존재하기 때문에
static을 자주 사용하게 된다면 프로그램의 종료시 까지 메모리가 할당 된 채로 존재하게 되므로 시스템에 영향을 끼칠 수 있게되므로 조심하는게
좋을 것 같다.
2)
우리가 일반적으로 만드는 Class 들은 static 영역에 생성되고 new 연산을 통해 생성한 객체들은 heap 영역에 생성된다.
위에 설명한 내용들을 이해한 후 읽어보면 확실히 와닿는 부분들이 있는 것 같다.
'언어 > Java' 카테고리의 다른 글
[Java] Optional (0) | 2022.03.20 |
---|---|
[Java] 클래스, 객체, 인스턴스 (0) | 2022.03.20 |
[Java] Iterator 사용 (0) | 2022.03.19 |
[Java] Math 클래스 (0) | 2022.03.19 |
[Java] 문자열 자르기, 길이 알아보기 (0) | 2022.03.19 |