[Java] 변수Scope, static

Hyo Kyun Lee·2022년 1월 30일
0

Java

목록 보기
12/49

1. 변수 scope

변수의 scope, 즉 변수를 사용할 수 있는 범위는 기본적으로 해당 블록 혹은 class 내부이다.

public class test{
	int x = 10;
    
    public void main(int value){
    int result = value;
    }
}

위에서 가장 최상위 class인 test에서 선언된 변수 x는 해당 클래스 전 범위에 걸쳐 사용이 가능하고, 내부 main class의 value 매개변수와 result는 내부적으로만 사용가능하다.

2. static

기존 class, method 등과 달리, 인스턴스에 의존하지 않고 그 자체로 class 등을 활용할 수 있는 형태를 말한다.

static 키워드를 사용하면 최상위 class 변수라 하더라도, 별도의 static 선언을 하지 않는다면 변수가 적용되지 않는다.
static 선언 시 인스턴스화하지 않더라도, 그 자체로 바로 사용가능하고 static화 하지 않은 field나 method 변수 및 클래스는 내부적으로 사용 불가능하다.

public class test{
	int x = 10;
    static int y = 5;
    
    public static void main(String[], args){
    	result1 = y;
        
        test t1 = new test();
        result2 = t1.x;
    }
}

이처럼 static으로 선언한 변수들은 static field 내에서 사용이 가능하다.
static하지 않은 class 및 method 내에서 static 변수를 사용하는 것은 가능하다.

3. 인스턴스 변수와 클래스 변수

인스턴스 변수는 말 그대로 인스턴스가 생성되면서 생성되는 변수로, 값을 수정할 수 있는 속성값이다.

test t1 = new test;
result1 = t1.x;

클래스 변수는 클래스를 통해 접근할 수 있는 변수로, 값을 저장하는 공간이 하나인 관계로 값이 그 하나로 정해진 상태로 공유되는 변수이다(수정불가).

public class test{
	int static value = 1;

	public static void main(String[], args){
    	result1 = value;
        result2 = class.value;
    }
}

이처럼 상위 클래스에서 선언된 static value를 직접 사용하거나, class를 별도로 인스턴스화하지 않고 class.value 등으로 바로 접근하여 사용가능하다.

클래스변수는 값을 공유하는 값이다.
즉 값을 저장하는 공간이 하나이기 때문에, 값을 수정한다기 보다는 공유한다(같은 메모리를 참조하기 때문에 다른 인스턴스를 생성한다는 것이 불가능하고, 하나의 값을 바라보고 공유한다).

4. 참조자료

프로그래머스 강의 - scope & static

0개의 댓글