본문 바로가기
IT/Java

Static

by Jeami 2013. 6. 22.
반응형


멤버변수의 선언시 Static 멤버변수로 선언하게 되면 단 하나의 메모리만 계속 참조하게 됩니다.

==========================================================

public class Korea {

    public static int s;      
    public int a; 
    public int b;
    public int c; 
    public int d; 
    public int e; 
 
    public static void main(String[] args) {
        Korea A = new Korea (); 
        Korea B = new Korea (); 
        Korea C = new Korea ();
       
        A.s = 1; A.a = 1; A.b = 2;
        A.c = 3; A.d = 4; A.e = 5;
 
        B.s = 10; B.a = 10; B.b = 20
        B.c = 30; B.d = 40; B.e = 50;
 
        C.s = 100; C.a = 100; C.b = 200;
        C.c = 300; C.d = 400; C.e = 500;

        System.out.print("A:" + A.s +","+ A.a +","+ A.b + "," + A.c +","+ A.d +","+ A.e);
        System.out.print("B:" + B.s +","+ B.a +","+ B.b + ","+ B.c +","+ B.d +","+ B.e);
        System.out.print("C:" + C.s +","+ C.a +","+ C.b + ","+ C.c +","+ C.d +","+ C.e);
    }  //main end
} //class END

실행 결과 값은 아래와 같습니다.
A: 100,1,2,3,4,5
B: 100,10,20,30,40,50
C: 100,100,200,300,400,500

============================================================



차이점이 보이시나요?

Korea 클래스내 멤버변수 선언 후 main메소드에서 Korea A,B,C 이렇게 3개의 인스턴스를 생성했습니다.

인스턴스를 생성한다는 것은 클래스내 멤버변수를 쓰겠다는 의미겠죠?

인스턴스 생성후 원하는 메소드나 변수에 접근하는 방법은 "."을 이용하게 됩니다.

위에서는 A,B,C 라는 참조변수를 사용해서 3개의 인스턴스를 생성한 것입니다.

그 다음,

위에서 보시다시피 A.s , A.a , ...... C.s , C.a , C.e 라는 표현으로 클래스내 int형 멤버변수를 호출하여 원하는 값을 임의로 대입했습니다.

실행 후 차이점을 발견하셨나요?

Static으로 선언된 s 변수에 대한 값의 변화가 어떤가요?

a,b,c,d,e 변수들은 내가 대입한 대로 잘 나왔는데, s만 유독 이상하게 나오네요.^^;

Static으로 선언된 변수의 특징입니다!

a,b,c,d,e 변수들은 A,B,C 인스턴스에 따라서 각각 다른 메모리 영역을 갖게 됩니다만,

Static형인 s 변수는 A,B,C 인스턴스 모두 하나의 메모리 영역만을 갖게 되는 것입니다.

인스턴스 생성할 때마다 새롭게 메모리 영역을 갖는 것이 아니라, 처음 생성된 A 인스턴스에서 s변수에 할당된 메모리 영역을 계속 사용한다는 것입니다. 그래서 A.s=1 값을 주어도 마지막으로 실행된 C.s=100 의 값이 결과적으로 A,B,C인스턴스 모두의 값이 되어버렸습니다.

최종적으로 수정된 값이 모두 적용된 것을 알 수 있습니다.

Static의 활용은 다음에 또..^^ 



반응형

'IT > Java' 카테고리의 다른 글

Static 메모리 작동 예제  (0) 2013.06.23
Java 배열 개념, 특징, 기초  (0) 2013.06.23
Constructor(생성자)  (0) 2013.06.22
JVM(자바 동작 원리)  (0) 2013.06.22
Java 설치  (0) 2013.06.22

loading