[JAVA] 변수의 scope와 static 개념 및 예제

강민범·2023년 3월 19일
0

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 듣다가
내가 자바공부를 더 해야겠다는 생각에 자바 기초부터 다시 공부해보려합니다.

Scope
변수들은 사용가능한 범위를 가지는데 이것을 scope라고 합니다.

public class VariableScopeExam{

int globalScope = 10;

	public void ScopeTest1(int value){
    	int localScope = 20;
        
        System.out.println(globalScope);
        System.out.println(localScope);
        System.out.println(value);
   	}
    
    public void ScopeTest2(int value2){
        System.out.println(globalScope);
        System.out.println(localScope); // X
        System.out.println(value);	// X 
   	}

-ScopeTest1,ScopeTest2메소드는 VariableScopeExam 클래스 안에 포함되어있으므로 변수 globalScope는 두 메소드에서 실행될 수 있다.

-변수 localScope와 value는 ScopeTest1메소드 영역 안에서 만들어진 변수이기때문에 ScopeTest2메소드에서 사용될 수 없다.

Static

public class VariableScopeExam{

int globalScope = 10;

	public void ScopeTest1(int value){
    	int localScope = 20;
        
        System.out.println(globalScope);
        System.out.println(localScope);
        System.out.println(value);
   	}
    
    public void ScopeTest2(int value2){
        System.out.println(globalScope);
        System.out.println(localScope); // X
        System.out.println(value);	// X 
   	}
    
    public static void main(String[] args){
    	System.out.println(globalScope); // X
        System.out.println(localScope); // X
        System.out.println(value); // X
    }
}

-main 메소드는 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);      // O
        }

    }

static 변수 공유
-static한 변수는 저장공간이 하나다. 인스턴스가 여러개 생성되도 저장할 수 있는 값은 하나 밖에 없다.
-staticVal같은 static한 필드를 클래스 변수라고 한다.
-클래스 변수는 레퍼런스.변수명으로 사용하기보다는 클래스명.변수명으로 사용하는것이 더 바람직하다. (VariableScopeExam.staticVal)

 ValableScopeExam v1 = new ValableScopeExam();
    ValableScopeExam v2 = new ValableScopeExam();
    v1.golbalScope = 20;
    v2.golbalScope = 30; 

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

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

    System.out.println(v1.statVal);  //20 이 출력된다. 
    System.out.println(v2.statVal);  //20 이 출력된다. 
profile
개발자 성장일기

0개의 댓글