- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
JAVA 일반 Java Static 변수
2014.01.28 23:15
[출처] http://infraking.tistory.com/103
Java Static 변수
1. 정의
가. static 변수(즉 정적변수)란
- Class 당 하나만 생성되는 변수, 객체(인스턴스)를 아무리 많이 만들더라도 변수는 하나만 존재
- 객체가 생성될 때마다 새롭게 생성되는 멤버 변수와는 달리 초기에 한번만 생성되고 공유하여 사용가능
나. static 변수 생성 시기 : Class 이름이 언급되어 질때 생성 (new 뿐만 아니라 Class 명만 나와도 생성됨)
다. static 변수 사용 방법 : 클래스명.변수명 OR 객체.변수명모두 가능
예) 1. StaticSample aa = new StaticSample();
System.out.println(aa.sTotal)
2. System.out.println(StaticSample.sTotal);
라. static 변수 초기화 방법
1) static 변수 는 초기 생성시 초기화
public static int sTotal=0;
2) static 변수 는 초기 생성시 초기화. 최초 1회만 호출됨.
public static int sTotal=0;
public int nTotal=0;
static {
sTotal += 10;
//nTotal += 10; //Static initializer 사용시 사용할 수 없다는 메시지 발생
}
3) 참고 static initializer 에서 staic 을 빼면 생성자와 같은 역할을 함. 즉 객체 생성시 마다 호출됨.
public static int sTotal=0;
public int nTotal=0;
{
sTotal += 10;
nTotal += 10; //Static initializer 사용시 사용할 수 없다는 메시지 발생
}
마. static method / function (정적 함수)
1) 함수 앞에 static 을 붙이면 정적함수가 됨.
-> 즉 Instance 생성 없이 그 함수를 직접 호출할 수 있음.
예) public static void main (String[] args) {}
-> main 함수도 최초 호출되기 위해서는 static 으로 선언되어 있어야 함.
2. 예제
(1) 테스트 호출 프로그램
|
package ref.staticSample; public class StaticMain { /** System.out.println(StaticSample.sTotal);
} |
(2-1) 기본적인 static 변수 사용 (동기화를 위해서는 syncronize 사용해야함.)
|
package ref.staticSample; public class StaticSample { /** =========================================== Basic Constructor!! sTotal : 1 Basic Constructor!! nTotal : 1 Basic Constructor!! sTotal : 2 Basic Constructor!! nTotal : 1 Basic Constructor!! sTotal : 3 Basic Constructor!! nTotal : 1 3 |
(2-2) basic initialize 사용 - 객체 생성시 마다 호출됨.
|
package ref.staticSample; public class StaticSample { /** ========================================= Basic Constructor!! sTotal : 11 |
(2-3) static initialize 사용 - 최초 class 언급시에 수행됨.
- static initialize 내부에는 static 변수만 존재할 수 있음.
|
package ref.staticSample; public class StaticSample { /**
Basic Constructor!! sTotal : 11 |
3. static 을 이용한 동일 객체 이용 방법
- 객체를 생성 new 하는 것에는 오버해드(메모리에 객체 생성)가 생긴다.
- 특히 많이 호출 되고 주로 READ 전용의 객체의 경우
-> 객체를 호출시 마다 생성하고 삭제하는 것보다, 특정 객체를 Static으로 메모리에 상주시킨 뒤 호출하는 것이 효율적임. (예) 데이터소스를 얻는 객체
- 내부 변수에 자기자신을 객체로 가지는 것 VS 내부에 staic 메소드 이용
-> 동일 객체 하나를 이용하는 것과 STATIC 변수의 특성을 이용하여 변수를 공유하는 것은 큰 차이가 있음.
가. 예제
- CLASS 속에 자신을 객체로 다시 선언함.
- 따라서 객체 생성시 내부 STATIC 변수로 자기 자신을 가지고 있음.
- CLASS 생성시(언급시) 자신을 객체로 가지는 STATIC 변수가 생성되며, 이 변수를 통하여 동일객체를 사용가능.
|
package ref.staticSample; //StaticClass aaa = StaticClass.getInstance().getConnection(); |
|
package ref.staticSample; public class StaticMain { /** } ======================================== NEW CLASS CONSTRUCTED!!(sc = new StaticClass(); 로 인해 ) |
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

