2011. 5. 23. 12:49

자바(Java)에서 static으로 선언되는 변수와 메소드

자바에서 static으로 선언되는 변수가 일반 변수 즉, 지역 변수와 다른 점은 지역 변수는 해당 메소드에서 사용되고 나면 자동으로 소멸되는데 반해 static 변수는 메모리에 지속적으로 그 값을 유지하고 있고, 변경도 가능하니까 누적된 값이 계속 남아있게 된다.

static 메소드는 자바에서 class를 작성할 때 그 안에 들어가는 메소드에 static을 붙여주는 것으로 이 메소드를 사용하려면 생성자 호출문 'new 클래스명()'를 쓸 필요없이 그냥 클래스명.static메소드()로 바로 사용할 수 있다.

이런 종류에는 Math, System. String 등이 있다. 수 없이 많은 각종 수학함수, println문, string변수 등을 new 연산자로 인스턴스를 생성해서 쓰려면 매우 번거로우므로 이걸 해결하는 방법으로 static을 붙여 선언하는 것이다. 메모리를 많이 차지하고 처리되는 속도가 느려지는 단점이 있어 많이 쓰는 것은 그리 좋은 방법이라고 볼 수는 없다.

  1: public class StaticTest {
  2:  static int staticNum ;
  3:  int num ;
  4: 
  5:  StaticTest(int num) {
  6:   staticNum += num ;
  7:   this.num += num ;
  8:  }
  9: 
 10:  static void test1() {
 11:   System.out.println("이건 스태틱이야~") ;
 12:  }
 13: 
 14:  public void test2() {
 15:   System.out.println("이건 스태틱이 아니야~") ;
 16:  }
 17: 
 18:  public static void main(String[] args)  {
 19:   System.out.println("-1의 절대값 : "+ Math.abs(-1)) ;
 20: 
 21:   StaticTest st1 = new StaticTest(50) ;
 22:   System.out.println("static 변수 값 : " + staticNum + "\t일반 변수 값 : " + st1.num);
 23:   
 24:   StaticTest st2 = new StaticTest(25) ;
 25:   System.out.println("static 변수 값 : " + staticNum + "\t일반 변수 값 : " + st2.num);
 26:   
 27:   StaticTest st3 = new StaticTest(30) ;
 28:   System.out.println("static 변수 값 : " + staticNum + "\t일반 변수 값 : " + st3.num);
 29:   
 30:   StaticTest st4 = new StaticTest(15) ;
 31:   System.out.println("static 변수 값 : " + staticNum + "\t일반 변수 값 : " + st4.num);
 32: 
 33:   StaticTest.test1() ;
 34:   st2.test2() ;
 35:  }
 36: }