면접 시 많이 물어보는 것이 변수의 스코프인데
스코프가 뭔 말인지 감이 안와서 어려울 수 있는데 막상 보면 단순하다
먼저 스코프란 변수를 사용할 수 있는 범위를 얘기하는데
{} 안에서 변수를 선언했을 경우 영역이 끝나기 전까지는
어디서든 사용이 가능하다
보면 상단의 sClassVal의 경우에는 Class 영역에서 선언한 변수인데
이 변수를 전역 변수(Global Variable) 이라고 한다
왜 전역이냐면 클래스 내의 모든 장소에서 사용할 수 있기 때문에 전역이라고 한다
클래스 안에 들어있는 메소드인 method1에서 전역변수를 바로 사용할 수 있는 것이 보인다
다음으로는 클래스 안의 메소드에서 변수를 선언했을 경우인데 sMethod1Val를 봐주면 된다
메소드 내에서 선언하는 변수는 지역 변수(Local Variable)이라고 하며
메소드 안에서만 사용이 가능하다
근데 메인 메소드를 보면 그냥 가져다 사용하지 않는 것이 보이는데
클래스 영역에서 선언한 변수를 메인 메소드에서 사용하려고 보니
에러가 뜨는 것이 보이는데 메인 메소드에서는
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 영역 끝
'Language > Java' 카테고리의 다른 글
자바 배열, List 순서 뒤집는 방법 (0) | 2020.02.09 |
---|---|
자바 배열 정렬, 역정렬 방법 (0) | 2020.02.09 |
자바 소켓통신으로 단체 채팅 프로그램 만들기 (0) | 2020.02.02 |
자바 Thread에서 run()과 start()의 차이점은? (0) | 2020.02.02 |
자바 소켓 통신 서버와 클라이언트간 메세지 주고받기 (0) | 2019.12.18 |
댓글