[Java] static에 대해 알아보자

맨큐의 경제학9판·2025년 1월 5일
0
class Foo{
	public static String classVar = "I class var";
	public String instanceVar = "I instance var";
	public static void classMethod() {
		System.out.println(classVar); // Ok
//		System.out.println(instanceVar); // Error
	}
	public void instanceMethod() {
		System.out.println(classVar); // Ok
		System.out.println(instanceVar); // Ok
	}
}
public class StaticApp {

	public static void main(String[] args) {
		System.out.println(Foo.classVar); // OK
//		System.out.println(Foo.instanceVar); // Error
		Foo.classMethod();
//		Foo.instanceMethod();
		
		Foo f1 = new Foo();
		Foo f2 = new Foo();
//		
		System.out.println(f1.classVar); // I class var
		System.out.println(f1.instanceVar); // I instance var
//		
		f1.classVar = "changed by f1";
		System.out.println(Foo.classVar); // changed by f1
		System.out.println(f2.classVar);  // changed by f1
//		
		f1.instanceVar = "changed by f1";
		System.out.println(f1.instanceVar); // changed by f1
		System.out.println(f2.instanceVar); // I instance var
	}

}

static은 '정적'이라는 뜻으로 static이 붙는것과 아닌것의 메모리 할당시점이 다르다

Error라고 쓰여진 주석코드를 각각 e1,e2라 하겠다

e1이 발생한 이유는 instanceVar는 인스턴스 변수이기 때문에 객체가 생성이되어야 메모리에 할당이 되기 때문에 객체가 생성이 안된 시점에서는 호출할수 없기 때문이다.

반면 instanceMethod 속 instanceVar를 불러올수 있느 이유는 instanceMethod또한 인스턴스 메소드 이기 때문에 instanceVar가 호출된 시점에는 이미 인스턴스 객체가 생성되고 난 후이기 때문이다.

e2가 발생한 이유는 e1과 같다.

그 밑에 Foo.instanceMethod()가 안되는 이유는 instanceMethod()는 인스턴스 메소드이기 때문에 인스턴스 객체가 생성되어야 호출할수 있기 때문이다.

profile
맨큐의 개발일지

0개의 댓글

관련 채용 정보