JAVA 문법 / 변수 - scope, static

corncheese·2021년 5월 15일
0

JAVA

목록 보기
4/7

자바에서의 변수 사용 범위

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

public class ValableScopeExam{
    int globalScope = 10; //인스턴스 변수
    
    public void scopeTest(int value){
    	int localScope = 10;
    }
}
  • 클래스 속성으로 선언된 변수 globalScope의 사용범위는 클래스 전체이다.
  • 매개변수로 선언된 int value 는 매서드 선언부에 존재하므로 사용범위는 해당 메소드 블럭내이다.
  • 매소드 블럭내에서 선언된 localScope 변수의 사용범위는 메소드 블럭내이다.

main메소드에서 사용하기

public class ValableScopeExam{
    int globalScope = 10; //인스턴스 변수
    
    public void scopeTest(int value){
    	int localScope = 10;
    }
    public static void main(String[] args){
    	System.out.println(globalScope); //오류
        System.out.println(localScope); //오류
        System.out.println(value); //오류
    }
}
  • main은 static한 메소드이다. static한 메소드에서는 static하지 않은 필드를 사용할 수 없다.

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한 변수는 공유된다.

  • static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성된다. 그러므로, 인스턴스가 여러개 생성되어도 static한 변수는 하나다.
valableScopeExam v1 = new ValableScopeExam();
valableScopeExam v2 = new ValableScopeExam();

v1.globalScope = 20;
v2.globalScope = 30;

System.out.println(v1.globalScope); //20 출력
System.out.println(v2.globalScope); //30 출력

v1.staticVal = 10;
v2.staticVal = 20;

System.out.println(v1.staticVal); //20이 출력**
System.out.println(v2.staticVal); //20이 출력**
  • globalScope같은 변수는 인스턴스가 생성될때 생성되기 때문에 인스턴스 변수라고 한다.
  • staticVal같은 static한 필드를 클래스 변수라고 한다.
  • 클래스 변수는 "레퍼런스.변수명"으로 사용하기 보다는 "클래스명.변수명"으로 사용하는 것이 바람직하다.
    - VariableScopeExam.staticVal

0개의 댓글