반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

코딩몬

[Java] 변수의 범위(Scope)와 static 본문

Java/Java 기초

[Java] 변수의 범위(Scope)와 static

탄중이 2021. 10. 21. 12:59
반응형

변수의 범위(Scope)

: 프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가지며, 이를 변수의 스코프(Scope)라고 한다.

 

변수가 선언된 블럭이 그 변수의 사용범위 즉, Scope 이다.

public class ValableScopeExam{

        int globalScope = 10;   // 인스턴스 변수 

        public void scopeTest(int value){   
            int localScope = 10;
            System.out.println(globalScope);
            System.out.println(localScpe);
            System.out.println(value);
        }
}
  • 클래스의 속성으로 선언된 변수 globalScope 의 사용 범위는 클래스 전체 이다.(global변수, 전역변수)
  • 매개변수로 선언된 int value 는 블럭 바깥에 존재하기는 하지만, 메서드 선언부에 존재하므로 사용범위는 해당 메소드 블럭내이다.
  • 메소드 블럭내에서 선언된 localScope 변수의 사용범위는 메소드 블럭내이다.(local변수, 지역변수)

 

* Static 한 Method에서 사용하기

Main Method와 같이 Static한 Method에서는 같은 Class 안에 있음에도 불구하고 globalScope변수를 사용할 수 없다.

즉, Static 한 Method에서는 Static하지 않은 Field를 사용할 수 없다.

(단, Static 한 Field는 Static한 메소드와 Static하지 않은 메소드 둘 다에 사용 가능하다.)

    public class VariableScopeExam {
        int globalScope = 10; 

        public void scopeTest(int value){
            int localScope = 20;            
            System.out.println(globalScope);
            System.out.println(localScope);
            System.out.println(value);
        }   
        public static void main(String[] args) {
            System.out.println(globalScope);  //오류
            System.out.println(localScope);   //오류
            System.out.println(value);        //오류  
        }   
    }

 

* Static

  • main 메소드는 static 이라는 키워드로 메소드가 정의되어 있다. 이런 메서드를 static 한 메소드 라고 한다.
  • static한 필드(필드 앞에 static 키워드를 붙힘)나, static한 메소드Class가 인스턴스화 되지 않아도 사용할 수 있다.
    public class VariableScopeExam {
        int globalScope = 10; 
        static int staticVal = 7;

        public void scopeTest(int value){
            int localScope = 20;        
        }

        public static void main(String[] args) {
            System.out.println(staticVal);      //사용가능 
        }

    }
  • 즉, static하게 선언된 변수는 new 키워드를 통해 인스턴스화 하지 않으므로, 값을 저장할 수 있는 공간이 하나만 생성된다. (인스턴스가 여러개 생성되어도 static한 변수는 하나다.)
  • Static한 Method 에서 Static하지 않은 메소드를 사용하려면 객체를 생성하고 사용한다.
    ValableScopeExam v1 = new ValableScopeExam();
    ValableScopeExam v2 = new ValableScopeExam();
    v1.golbalScope = 20; // static X 변수
    v2.golbalScope = 30; 

    System.out.println(v1.golbalScope);  //20 이 출력된다. 
    System.out.println(v2.golbalScope);  //30이 출력된다. 

    v1.staticVal = 10; // static 변수
    v2.staticVal = 20; 

    System.out.println(v1.statVal);  //20 이 출력된다. 
    System.out.println(v2.statVal);  //20 이 출력된다.

staticVal은 static한 변수 이므로, 맨 마지막 값인 20의 주소를 레퍼런스변수 v1, v2가 가리킨다.

반응형

'Java > Java 기초' 카테고리의 다른 글

[Java] 생성자  (0) 2021.10.21
[Java] 열거형(enum)  (0) 2021.10.21
[Java] Class 의 구성요소 필드(Field), 메소드(Method)  (0) 2021.10.21
[Java] String Class  (0) 2021.10.20
[Java] Class  (0) 2021.10.20
Comments