static의 용도

course/자바 2012. 2. 12. 07:21
자바에서 클래스를 정의할때는 그 클래스의 객체가 가지는 용도를 의미한다.
즉 new를 써서 해당 클래스의 객체를 생성해야만 뭔가를 할 수 있는데 그 과정에서 메모리가 활당되고 메소드의 사용이
가능해진다.

그런데 클래스에 생성된 객체와 무관하게(객체를 생성하지 않아도) 호출 가능한 메소드가 필요할때가 있다.
이때 사용하는 것이 static이다.
static으로 지정된 메소드나 필드는 클래스의 객체와는 완벽히 무관하다.
반대로 static이 아닌 메소드는 반드시 객체를 생성해야 한다.


1. 메소드와 필드를 static으로 할 경우

ex1)
class Static1 {
    static int i = 100;
}

Static1의 객체를 수십개 만들어도 Static1.i는 하나만 존재하고 모든 객체는 같은 i를 공유한다.

ex2)
Static1 st1 = new Static1();
Static1 st2 = new Static1();
Static1 st3 = new Static1();
.
.
.

위에 생성한 객체 st1.i, st2.i, st3.i ... 등은 100이라는 공통값을 가지게 된다.
왜냐하면 모두 같은 메모리를 공유하기 때문이다.

이때 변수를 참조하는 방법은 
1) 생성된객체.변수 방식  ex) st1.i,  st2.i ...
2) 클래스이름.변수  방식 ex) Static1.i++;
등으로 가능하다.


2. static메소드의 사용
static 메소드는 객체참조를 통해 호출하거나, 클래스 이름으로 호출(객체 생성 없이)할 수 있다.

ex)
class StaticIncrement {
    static void increment(){
        Static1.i++;
    }
}
라고 클래스를 정의 했으면

StaticIncrement si = new StaticIncrement();
si.increment();   // increment()라는 메소드의 호출을 si라는 객체를 통해 할 수 있다.

또는

StaticIncrement.increment();   // 클래스 이름으로 직접 호출한다.




'course > 자바' 카테고리의 다른 글

간단한 로그 출력 프로그램.  (0) 2015.08.22
걍 심심풀이 땅콩~  (0) 2015.07.14
객체생성  (0) 2012.03.13