[Java] 변수의 scope와 static

Kwon·2023년 10월 26일
0

Java

목록 보기
6/15

사진 출처 : https://namu.wiki/w/Git

변수의 scope와 static

변수의 scope는 ?

> 프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가지는 것을 의미

package Programmers.superandParents;

public class JavaExam {
    int globalScope = 10;
    static int num = 7;
    public void scopeTest(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(value2);
    }

    public static void main(String[] args) {
        System.out.println(num);
        JavaExam v1 = new JavaExam();
        System.out.println(v1.globalScope);
        JavaExam v2 = new JavaExam();
        v1.globalScope = 10;
        v2.globalScope = 20;
        System.out.println(v1.globalScope);
        System.out.println(v2.globalScope);
        v1.num = 50;
        v2.num = 100;
        System.out.println(v1.num);
        System.out.println(v1.num);
    }
}

global & local 변수

public class JavaExam {
    int globalScope = 10;
    public void scopeTest(int value) {
        int localScope = 20;

        System.out.println(globalScope);
        System.out.println(localScope);
        System.out.println(value);
    }

◼ global 변수는 클래스 안에서 어디서든 사용할 수 있는 광대한 의미이다.

◼ local 변수는 해당 들어 있는 메서드 혹은 클래스 안에서만 사용이 가능하다.

◼ 위의 코드를 보면 localScope는 scopeTest 안에서만 사용이 가능하다.

그래서

public void scopeTest2(int value2) {
    System.out.println(globalScope);
     System.out.println(localScope);	//error
     System.out.println(value);			//error
    System.out.println(value2);
}

◼ scopeTest 메서드에서 선언된 매개변수 value는 해당 메서드에서만 이용이 가능하므로 error가 발생

◼ localScope 또한 scopeTest 메서드에서 선언된 지역 변수이므로 error가 발생

static 변수

class test{
	static int num1 = 7;
    int num2 = 7;
}

public static void main(String[] args) {
        Number number1 = new Number();
    	Number number2 = new Number();
    	
    	number1.num++;
    	number1.num2++;
    	System.out.println(number2.num)
    	System.out.println(number2.num2);
    }

◼ Static은 객체에 소속된 멤버가 아닌 클래스에 고정된 멤버

◼ Static영역에 있는 멤버들은 프로그램 종료시 까지 메모리가 할당된 채로 존재.(Garbage collector 관리영역 밖에 존재하기 때문)

◼Static한 변수는 공유가 되므로 인스턴스 여러개가 존재해도 원본 Static은 하나다.

profile
📲 @bu_kwon_2 / 💻 dnu05043.log / ⌨ Back-end / 🦁 LikeLion

0개의 댓글