사진 출처 : https://namu.wiki/w/Git
> 프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가지는 것을 의미
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);
}
}
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가 발생
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은 하나다.