class Foo {
// 변수 선언
public static String classVar = "I calss var";
public String instanceVar = "I instance var";
}
public class Main {
public static void main(String[] args) {
System.out.println(Foo.classVar);
System.out.println(Foo.instanceVar); // Error
}
}
static으로 선언한 변수 classVar는 클래스 Foo로 바로 호출가능
instance로 선언한 변수는 불가능 <- 인스턴스를 통해서 사용하도록 고안 됨
class Foo {
// 변수 선언
public static String classVar = "I calss var";
public String instanceVar = "I instance var";
// 메소드 선언
public static void classMethod() {
System.out.println(classVar); // 클래스 변수에는 접근 가능
System.out.println(instanceVar); // Error
}
public void instanceMethod() {
System.out.println(classVar);
System.out.println(instanceVar);
}
// 인스턴스메소드는 모든 변수 접근 가능
}
public class Pracc {
public static void main(String[] args) {
System.out.println(Foo.classVar);
// System.out.println(Foo.instanceVar); Error
Foo.classMethod();
Foo.instanceMethod(); // 호출 안됨
Foo f1 = new Foo();
}
}
<instance f1>
static String classVar <- 클래스의 변수를 가리킬 뿐
String instanceVar = "I instance var" <- 그대로 복제, 별개의 인스턴스
static classMethod() {} <- 클래스의 메소드를 가리킬 뿐
instanceMethod() <- 그대로 복제, 별개의 메소드
바꿔보기
class Foo {
// 변수 선언
public static String classVar = "I calss var";
public String instanceVar = "I instance var";
// 메소드 선언
public static void classMethod() {
System.out.println(classVar); // 클래스 변수에는 접근 가능
System.out.println(instanceVar); // Error
}
public void instanceMethod() {
System.out.println(classVar);
System.out.println(instanceVar);
}
// 인스턴스메소드는 모든 변수 접근 가능
}
public class Pracc {
public static void main(String[] args) {
System.out.println(Foo.classVar);
// 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.instanVar); // I instance var
f1.classVar = "changed";
System.out.println(Foo.classVar); // changed
// f1을 바꿔도 링크되어있어 클래스에서도 바뀜
f1.instanceVar = "changed"
System.out.println(f1.instanceVar); // changed
System.out.println(f2.instanceVar); // I instance var
// f1을 바꾸면 f1만 바뀌고 f2는 그대로
}
}
저도 자세히는 모르고 지나갔던 내용인데~
덕분에 알아갑니다!!