본문 바로가기
Language/Java

자바 변수의 스코프가 뭔말?

by wakestand 2020. 2. 6.
반응형

면접 시 많이 물어보는 것이 변수의 스코프인데

스코프가 뭔 말인지 감이 안와서 어려울 수 있는데 막상 보면 단순하다

 

먼저 스코프란 변수를 사용할 수 있는 범위를 얘기하는데

{} 안에서 변수를 선언했을 경우 영역이 끝나기 전까지는

어디서든 사용이 가능하다

 

보면 상단의 sClassVal의 경우에는 Class 영역에서 선언한 변수인데

이 변수를 전역 변수(Global Variable) 이라고 한다

왜 전역이냐면 클래스 내의 모든 장소에서 사용할 수 있기 때문에 전역이라고 한다

 

클래스 안에 들어있는 메소드인 method1에서 전역변수를 바로 사용할 수 있는 것이 보인다

 

다음으로는 클래스 안의 메소드에서 변수를 선언했을 경우인데 sMethod1Val를 봐주면 된다

메소드 내에서 선언하는 변수는 지역 변수(Local Variable)이라고 하며

메소드 안에서만 사용이 가능하다

 

근데 메인 메소드를 보면 그냥 가져다 사용하지 않는 것이 보이는데

 

 

자바 객체화(인스턴스화) 알아보기

위 스크린샷을 보면 ObjectTest 클래스 영역에 정의한 i를 출력하려고 해도 에러가 뜨면서 출력이 되지 않는 것이 보이는데 i로 선언한게 없는데 i 값을 어떻게 가져옴? 이런 에러가 뜨는 것이다 클래스는 메소드..

wakestand.tistory.com

클래스 영역에서 선언한 변수를 메인 메소드에서 사용하려고 보니

에러가 뜨는 것이 보이는데 메인 메소드에서는

static 타입이 아니면 바로 호출할 수 없기 때문에 객체화를 한 뒤에 불러올 수 있다

객체화 개념은 위 글을 참조하고

객체화 자체는 클래스명 참조명 = new 클래스명(); 식으로 사용할 수 있다

 

static 타입은 클래스 내에서 한 변수를 공유해서 어느 곳에라든지 사용할 수 있기 때문에

객체화 없이도 바로 사용할 수 있지만, 클래스 영역에서 선언한 변수는 객체화를 하고 사용하는 것이다

 

마지막으로 예제에 사용한 코드는 다음과 같다

 

package test;

public class ScopeTest { // Class 영역
	String sClassVal = "Class Value"; // Class 영역에 선언한 변수(Global Variable)
	static String sStaticVal = "Static Value"; // 스태틱은 클래스 내에서 공유되어 아무데서나 사용 가능
	
	public void method1() { // 메소드 영역
		String sMethod1Val = "method1 Value"; // Method 영역에 선언한 변수(Local Variable)
		System.out.println(sClassVal); // Class 영역 안에 있는 메소드에서는 클래스 변수 사용 가능
	} // 메소드 영역

	public static void main(String[] args) {
		// 메인 메소드는 static 변수가 아닐 경우 객체화해야 클래스 변수 사용 가능
		System.out.println(sStaticVal); 
		ScopeTest s = new ScopeTest();
		System.out.println(s.sClassVal);
	}

} // Class 영역 끝
반응형

댓글