본문 바로가기

빅데이터과정/JAVA

#54_140828_JAVA_STATIC

728x90

# STATIC


 

Static 변수란

1.   인스턴스 생성과 상관없이 초기화 되는 변수

2.   public으로 선언되면 어디서든 접근 가능

3.   staitc 변수는 모든 인스턴스(클래스로 인해서 생성된 객체)가 공유해서 사용하는 변수

4.    여러 클래스들이 이 변수를 공유해서 사용할 수 있다

새로운 변수를 클래스내에서 따로 선언하지 않아서 메모리 사용율이 좋아진다(메모리를 적게 사용하는 프로그램 생성)

코딩을 쉽게 할 수 있다

 

 

 

캡슐화 예제

class InstCnt

{

      static int instNum=0;

     

      public InstCnt()

      {

            instNum++;

            System.out.println("인스턴스 생성: "+instNum);

            //생성자객체가 생성되는 순간 println 수행된다

            //생성자는 변수초기화를 위해서 이용하기도 하고

            //객체가 생성되자마자 바로 수행되도록 하는데 이용하기도 한다

      }

     

}

 

class ClassVar

{

      public static void main(String[] args)

      {

            InstCnt cnt1=new InstCnt();

            InstCnt cnt2=new InstCnt();

            InstCnt cnt3=new InstCnt();

            //생성자 코드안에 println 있기 때문에 결과가 바로 출력

      }

}

 

결과값

인스턴스 생성: 1

인스턴스 생성: 2

인스턴스 생성: 3

 

 

 

 

Static 변수에 접근하는 방법 3가지

 

static 변수를 사용하는 경우와 사용하지 않는 경우

class AccessWay

{

      static int num=0;

     

      AccessWay()

      {

            incrCnt();

      }

      public void incrCnt(){num++;}

      //클래스 내에서 자리를 빌려줬으므로 클래스내에서 직접 접근 가능

}

 

class ClassVarAccess

{

      public static void main(String[] args)

      {

            AccessWay way=new AccessWay();

            way.num++; //way라는 참조변수를 통해 접근

            AccessWay.num++;

            // 클래스 이름을 통해서 접근

            System.out.println("num="+AccessWay.num);

           

      }

}

 

 

class AAA {

      static int num1; // default 인스턴스 변수

      static int num2;

}

 

class BBB extends AAA {

      public static void main(String[] args) {

            num1 = 10; // default 변수는 동일 패키지 내에서 접근가능하다.

            num2 = 20;

 

            int num3 = num1 + num2;

 

            System.out.println(num3);

 

      }

}

 

결과값

num=3

인스턴스 생성: 2

인스턴스 생성: 3

 

 

 

 

static 변수가 초기화되는 시점

자바는 메인 메소드를 실행할 때 필요한 클래스만 실행

자바가 아닌 다른 하나의 실행 파일로 만든 프로그램은 실행파일 전부가 메모리에 올라간다

그러나 자바는 필요한 클래스만 메모리에 올려 필요한 메모리 공간만을 이용한다

static 변수가 초기화 되는 시점은 메인 메소드가 실행될 때 즉 static 변수가 있는 클래스가 JVM에 의해서 실행될 때 메모리 공간으로 올라온다

그러므로 static 변수를 생성자를 통해서 초기화 하는 실수를 저질러선 안된다

 

 

 

static 변수를 사용하는 경우와 사용하지 않는 경우

class InstCnt

{

      static int instNum=100;

}

 

class StaticValNoInst2

{    

      public static void main(String[] args)

      {

            InstCnt.instNum-=15;       

            System.out.println(InstCnt.instNum);

      }

}

결과값

85

class InstCnt {

      static int instNum;

 

      public InstCnt() {

            instNum = 100;

      }

}

 

class StaticValNoInst {

      public static void main(String[] args) {

 

            InstCnt.instNum -= 15;

            System.out.println(InstCnt.instNum);

      }

}

 

결과값

15

 








'빅데이터과정 > JAVA' 카테고리의 다른 글

#55_140829_JAVA_THIS  (0) 2014.08.29
#54_140828_JAVA_OVERLOADING  (0) 2014.08.28
#54_140828_접근제어 지시자  (0) 2014.08.28
#54_140828_JAVA_클래스 패스  (0) 2014.08.28
#52_140827_JAVA_상속  (0) 2014.08.27