IT 개발노트
static의 이해 본문
1. static의 이해
1.1 static 키워드의 이해
: 우선 static 키워드는 '공유'라고 생각을하자.
1.2 static은 클래스 변수
: static을 사용한 변수는 클래스 변수이다.
객체는 클래스에서 생성되어지고, 생성된 객체들은 모양은 동일하지만 전혀 다른 것이라고 배웠다.
하지만 static이 붙은 변수는 객체 변수가 아닌 클래스 변수로써 객체가 생성되기 전에 이미 존재한다.
* 데이터 영역은 가비지 콜렉터가 관리하지 않고, Heap영역만 관리한다.
1.3 static의 장점과 단점
: static을 사용한 변수는 객체생성과는 상관없이 클래스와 함께 존재하게 된다.
즉, 객체 생성을 하지 않아도 메모리에 상주하게 된다는 것이다.
객체를 생성하지 않고도 존재한다는 것은 그만큼 Heap 영역 메모리를 사용하지 않아도 된다는 것이다.
객체 생성을 하지 않고도 사용할 수 있다는 것은 분명 장점이지만, 가비지 콜렉터의 관리 밖에 있기 때문에 항상 데이터 영역 메모리에 상주해 있다.
즉, 프로젝트가 커지고, 시스템이 오랜 시간 동안 돌아가게 되면 시스템 운영속도가 점차 느려지다가 급기야 큰 재앙이 올 수도 있다.
따라서 static의 사용은 신중해야 한다.
예시 1
가정 : 원주율은 3.1415926535......끝이없다. 이러한 경우 원주율을 3.14까지로 정의해 놓고 사용하자고 팀원들 사이 약속을 했다.
1 2 3 4 5 6 7 8 9 10 11 12 | package sungju.Java.StaticEx; public class MainClass { public static void main(String[] args) { System.out.println("원주율 : " + PiClass.PI); PiClass.PI = 3.141592D; System.out.println("원주율 : " + PiClass.PI); } } |
1 2 3 4 5 6 7 | package sungju.Java.StaticEx; public class PiClass { public static double PI =3.14D; } |
설명 : static으로 PI값을 저장하게 되면, 값이 공용으로 사용하게 된다.
즉, PI값을 선언해준 이후에 다른 곳에서 값을 변경하게 되면 모든 PI값이 일괄 변경하게 된다.
예시 2
1 2 3 4 5 6 7 8 9 | package sungju.Java.StaticEx; public class MainClass { public static void main(String[] args) { System.out.println("원주율 : " + PiClass.PI); } } |
1 2 3 4 5 6 7 | package sungju.Java.StaticEx; public class PiClass { public static final double PI =3.14D; } |