결론적으로 모든 인스턴스가 같은 값을 공유해야 할 경우 static 변수를 사용한다.
처음 프로그램이 로드될 때 단 한번 데이터 영역에 생성된다.
인스턴스의 생성과 상관없이 사용할 수 있으므로 클래스 이름을 참조한다.
클래스 변수(static 필드)는 클래스 영역에 존재한다. 객체 외부에 존재하므로 여러 객체가 공유에 좋다.
인스턴스 변수는 각 객체 내부에 존재한다.
웹 사이트 방문시마다 조회수를 증가시키는 Counter 프로그램
public class Counter {
int count = 0;
Counter() {
this.count++;
System.out.println(this.count);
}
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
}
}
이 코드의 결과는 다음과 같다.
1
1
c1과 c2의 count는 서로 다른 메모리를 가리키고 있기 때문에 원하던 결과(카운트가 증가된)가 나오지 않는 것이다.
static을 사용한 예제다.
public class Counter {
static int count = 0;
Counter() {
this.count++;
System.out.println(this.count);
}
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
}
}
1
2
static 키워드를 통해 count 변수가 공유되고 있는 것이 보인다.
즉 static은 공유하기 위한 용도이다.
날짜를 구하는 Util 클래스 예
import java.text.SimpleDateFormat;
import java.util.Date;
public class Util {
public static String getCurrentDate(String fmt) {
SimpleDateFormat sdf = new SimpleDateFormat(fmt);
return sdf.format(new Date());
}
public static void main(String[] args) {
System.out.println(Util.getCurrentDate("yyyyMMdd"));
}
}
Util클래스의 getCurrentDate라는 스태틱 메소드(static method)를 이용하여 오늘의 날짜를 구하는 예제다.
https://peemangit.tistory.com/396
https://wikidocs.net/228
https://cloudstudying.kr/lectures/198