static
static을 어떻게 쉽게 설명 할 수 있을까?
1. static 이란 정적이다 라는 의미를 갖고있다.
2. static은 class 멤버이다.
3. static 키워드를 통해 생성된 정적 멤버들은 Static 영역에 할당된다.
4. static 키워드로 생성된 변수의 값을 변경하면 해당 변수를 사용하는 모든곳의 값이 변경된다.
Java를 얼마나 오래 사용하고 공부한 사람이라면 이해가 가능할까?
일반적으로 다른 class에 선언된 변수나 메서드는 현재의 class에서 바로 사용을 할 수 없다.
다른 class의 변수나 메서드를 사용하기 위해서는 new 키워드를 사용하는데..
이때 class를 보통 객체, new 키워드를 사용하여 만들어 지는것을 인스턴스(Instance)라고 한다.
만약
class DateUtil{
public static String today = "Today is my birthday";
public String getDate(){
return "2022-01-01";
}
}
라는 DateUtil class 의 getDate() 메서드를 호출하려면
DateUtil dateUtil = new DateUtil(); // DateUtil 이라는 class스를 dateUtil 이라는 이름의 인스턴스로 생성
dateUtl.getDate(); // 인스턴스명.메서드명 또는 인스턴스명.변수 로 접근 가능
이와같이 DateUtil class를 new 키워드로 인스턴스로 선언하여 사용해야 한다.
보통 독립적으로 사용되거나 그때그때 사용하고 버리는 경우는 이렇게 new 키워드로 메모리를 할당해서 사용하면 된다.
그런데 자주 사용하는 유틸리티 함수(날짜형식변환, 숫자형식변환 등.. )는 아주 많은 곳에서 한꺼번에 쓰이는 경우가 많다.
이 유틸리티를 전부 new 키워드를 사용해서 생성해서 사용하는 경우 메모리가 부족한 현상이 일어날 수도 있다.
이렇게 한번의 선언으로 여러곳에 사용할 경우 static로 선언해서 사용하면 메모리 사용에 효율적일 수 있겠다.
위의 DataUtil class에서 today 라는 변수에 접근 하려면
DateUtil.today;
의 형식으로 바로 접근이 가능하다.
그리고 today는 static로 선언되어 있기 때문에 누군가 DateUtil.today = "2022.05.05"로 변경하면 모든 곳에서 해당 내용이 변경되어진다.
사용에 유의해야할점 이다.
만약 절대로 변하지 않는 변수라면 staic 뒤에 final 키워드를 붙여주면 된다.
class를 만들때 static만 따로 빼서 만들어 주는게 관리와 사용이 편한듯 함..