public class ScopeTest{ // Class 영역
String classVal = "Class Value"; // Class 영역에 선언한 변수(Global Variable)
static String staticVal = "Static Value"; // 스태틱은 클래스 내에서 공유되어 아무데서나 사용 가능
public void m(){ // 메소드 영역
String methodVal = "Method Value" // Method 영역에 선언한 변수(Local Variable)
System.out.println(classVal); // Class 영역 안에 있는 메소드에서는 클래스 변수 사용 가능
} // 메소드 영역
public static void main(String[] args){
// 메인 메소드는 static 변수가 아닐 경우 객체화해야 클래스 변수 사용 가능
System.out.println(staticVal);
ScopeTest s = new ScopeTest();
System.out.println(s.sClassVal);
}
}
※ 스코프?
변수를 사용할 수 있는 범위
classVal: Class 영역에서 선언한 변수로 전역 변수(Global Variable)이라고 함.
methodVal: 메소드 내에서 선언하는 변수, 지역변수(Local Variable), 메소드 안에서만 사용 가능
public class ObjectTest{
int a = 1;
public static void main(String[] args){
System.out.println(a);
}
}
클래스는 메소드와 변수들을 모아 놓은 설계도(Blueprint)에 불과하기 때문에 객체화를 해서 클래스의 정보들을 객체 안에 담아줘야 사용 가능한데 현재는 객체화를 하지 않고 클래스에 들어있는 값을 가져오라고 해서 실행이 되지 않는다.
public class ObjectTest{
int a = 1;
public static void main(String[] args){
ObjectTest ot; // ObjectTest 타입의 ot 선언
ot = new ObjectTest(); // ot안에 ObjectTest Class 넣어주기
System.out.println(ot.a);
}
}
※ 정리
객체화(인스턴스화)란?
: 메소드와 변수를 모아놓은 것에 불과한 클래스를 사용할 수 있도록 해당 클래스 타입의 객체명을 선언하고 값을 넣어줘서 해당 클래스의 변수나 메소드를 사용 가능한 상태로 만드는 것.