하루하루 살아남기

[Java] 변수의 Scope / Static (2) 본문

개발/Java

[Java] 변수의 Scope / Static (2)

막막이 2021. 3. 9. 23:45
반응형
public class ScopeClass {

    int gloablVariable = 10;
    static int staticVariable = 7;

    public static void main(String[] args) {

        ScopeClass v1 = new ScopeClass();
        ScopeClass v2 = new ScopeClass();

        v1.staticVariable = 50;
        v2.staticVariable = 100;

        System.out.println("static1: " + v1.staticVariable);
        System.out.println("static2: " + v2.staticVariable);

    }

}​
public class ScopeClass {

    int gloablVariable = 10;
    static int staticVariable = 7;

    public static void main(String[] args) {

        ScopeClass v1 = new ScopeClass();
        ScopeClass v2 = new ScopeClass();
        
    }

}

 

 

globalScope 클래스는 인스턴스가 생성될 때, globalVariable 값을 저장하는 공간을 별개로 가집니다. 따라서 위 코드처럼 참조 변수를 하나 더 생성한다면 globalVariable값을 저장할 수 있는 공간이 별도로 생깁니다. 즉, globalVariable 변수의 값을 공유하지 않습니다. 아래 코드는 이를 확인하는 코드입니다.

 

 

public class ScopeClass {

    int gloablVariable = 10;
    static int staticVariable = 7;

    public static void main(String[] args) {

        ScopeClass v1 = new ScopeClass();
        ScopeClass v2 = new ScopeClass();

        v1.gloablVariable = 10;
        v2.gloablVariable = 20;

        System.out.println(v1.gloablVariable);
        System.out.println(v2.gloablVariable);

    }

}

 

 

위 코드를 실행하면 v1의 globalVariable 에는 10이, v2의 globalVariable에는 20이 출력됩니다. 각각 다른값을 저장한 거죠. 이번에는 static 변수에 값을 부여해 보겠습니다. 

 

 

public class ScopeClass {

    int gloablVariable = 10;
    static int staticVariable = 7;

    public static void main(String[] args) {

        ScopeClass v1 = new ScopeClass();
        ScopeClass v2 = new ScopeClass();

        v1.staticVariable = 50;
        v2.staticVariable = 100;

        System.out.println(v1.staticVariable);
        System.out.println(v2.staticVariable);

    }

}

 

 

 

각각의 참조변수의 staticVariable에 50, 100을 대입했지만, 값은 100만 출력되었습니다. static 한 필드는 인스턴스를 생성할 때 만들어지는 것이 아니라서, 값을 저장할 수 있는 공간도 하나뿐입니다. 같은 공간을 사용하기 때문에 값을 공유합니다.  이런 변수를 클래스 변수라고 부릅니다. static하지않은 일반 변수는 인스턴스를 생성해야 사용할 수 있기 때문에 인스턴스 변수 라고 부릅니다.

 

클래스 변수는 인스턴스를 사용하지 않고도 사용할 수 있기 때문에 클래스 명.클래스 변수명으로 사용하는 것이 좋습니다

예를 들어 위 클래스의 경우에는 ScopeClass.staticVariable처럼 말이죠

 

728x90
반응형

'개발 > Java' 카테고리의 다른 글

[Java / 자바] 메서드 오버로딩(Method Overloading)  (0) 2021.03.15
[Java / 자바] this 키워드  (0) 2021.03.14
[Java / 자바] 생성자  (0) 2021.03.14
[Java] 자바 열거형(enum)  (0) 2021.03.11
[Java] 변수의 스코프 / Static  (0) 2021.03.08
Comments