본문 바로가기

Programming Language/JAVA

[JAVA] 변수종류 ( 지역변수, 전역변수, 클래스변수, 인스턴스변수 )

[JAVA] 변수종류 ( 지역변수, 전역변수, 클래스변수, 인스턴스변수 )

 

 

 

 

 

 

public class Test {

	public static void main(String[] args) {
		int i = 0;
		while(i<1) {
			int result = 100;
			i++;
			System.out.println(result);
		}
               //System.out.println(result);
	}

}

* 지역변수 설명
Main메소드 안에 int 데이터타입으로 i변수를 선언해줬습니다.
그렇기때문에 while문으로 들어가기전에 i변수를 선언했기에 while문 안에서는 전혀 에러가 나타나지않고
정상적으로 실행됩니다. 하지만, while문 밑에 System.out.println 주석을 풀고 실행하려하면 에러가 나옵니다.
그이유는 현재 result변수는 while문 안에서 변수선언해줬기때문에 result변수는 while문을 벗어나면
에러가 발생합니다! 정상적으로 만들기위해서는 result변수를 i변수선언할때 밑에 해주면 문제없이 실행됩니다.

 

* 전역변수는 함수 바깥에 선언하여 클래스 전체에서 사용가능한 변수입니다.
* 지역변수는 함수 속에 선언하여 해당 함수 속에서만 사용가능한 변수입니다.
( + 여기서 i는 "전역변수"라고하고, var는 "지역변수"라고 합니다. )

 

 

 

 

 

 

public class Test {
	 int var = 100;
		
		public void variable() {
			System.out.println("var : "+var);
		}
		public void func() {
			System.out.println("var : "+var);
			
		}
		public static void main(String[] args) {
			Test T = new Test();
			T.variable();
			T.func();
		}

	}

* 인스턴스변수 설명

Test클래스에 variable과 func 메소드를 각각 만들어줍니다.
Main메소드안에서 Test클래스를 인스터스생성해주고, 메소드를 호출해봅니다.
콘솔창에 100, 100이 뜨는 이유는 현재 Test클래스에서 메소드안에서 var변수를 선언해준게 아니라
메소드 생성전에 var변수를 선언을 먼저해줬기때문에 문제없이 실행이 됩니다.
만약 func메소드안에서만 var변수를 선언해준다면 variable메소드에서는 var변수를 찾을수없기에 에러가 발생합니다.

 

 

 

 

 

class Test01 {
	private int var = 100;

	public void func() {
		System.out.println("var : " + var);
		var += 100;
	}

}
public class Test {
	public static void main(String[] args) {
			Test01 T = new Test01();
			T.var = 2000;
			T.func();
	}
}

Test01클래스와 Test클래스를 각각 만들어주고, Test01클래스에는 var변수의 접근제한자를 private로 해줍니다.
그리고나서 Test클래스에서 Test01클래스에있는 지역변수 var를 수정해주기 위해
Test01클래스를 객체생성해주고 var변수를 수정하려하면 에러가 발생합니다.
이 에러는 private로 해놓았기때문에 에러가 발생하기에 이것을 아래 소스에서 수정해보겠습니다.

 

 

 

 

 

class Test01 {
	public int var = 100;

	public void func() {
		System.out.println("var : " + var);
		var += 100;
	}

}
public class Test {
	public static void main(String[] args) {
			Test01 T = new Test01();
			T.var = 2000;
			T.func();
	}
}

private 접근제한자를 public접근제한자로 변경하면 오류없이 실행됩니다.