참고 강의
생활코딩 : JAVA 객체 지향 프로그래밍 - 6. static
https://www.youtube.com/watch?v=hvTuZshZvIo
package main.java;
class Foo{
public static String classVar = "I class var"; // static 변수 : 앞에 static이 붙었으므로 class 소속
public String instanceVar = "I instance var"; // instance 변수 : 앞에 static 없으므로 instance 소속
}
public class StaticPrac {
public static void main(String[] args) {
System.out.println(Foo.classVar);
System.out.println(Foo.instanceVar); // instance를 통해서만 사용가능
}
}
:
I class var
package main.java;
class Foo{
public static String classVar = "I class var";
public String instanceVar = "I instance var";
public static void classMethod(){ // class형 메소드
System.out.println(classVar); // static 변수에 접근이 가능
// System.out.println(instanceVar); // instance 변수에는 접근이 불가능하다.
}
public void instanceMethod(){ // instance 메소드
System.out.println(classVar); // static 변수에 접근이 가능
System.out.println(instanceVar); // instance 변수에 접근이 가능
}
}
public class StaticPrac {
public static void main(String[] args) {
System.out.println(Foo.classVar);
// System.out.println(Foo.instanceVar);
}
}
package main.java;
class Foo{
public static String classVar = "I class var";
public String instanceVar = "I instance var";
public static void classMethod(){ // class형 메소드
System.out.println(classVar); // static 변수에 접근이 가능
// System.out.println(instanceVar); // instance 변수에는 접근이 불가능하다.
}
public void instanceMethod(){ // instance 메소드
System.out.println(classVar); // static 변수에 접근이 가능
System.out.println(instanceVar); // instance 변수에 접근이 가능
}
}
public class StaticPrac {
public static void main(String[] args) {
System.out.println(Foo.classVar);
// System.out.println(Foo.instanceVar);
Foo.classMethod();
// Foo.instanceMethod(); // intstance Method는 instance 소속이기 때문에 class를 통해 접근 불가능
}
}
package main.java;
class Foo{
public static String classVar = "I class var";
public String instanceVar = "I instance var";
public static void classMethod(){
System.out.println(classVar);
// System.out.println(instanceVar);
}
public void instanceMethod(){
System.out.println(classVar);
System.out.println(instanceVar);
}
}
public class StaticPrac {
public static void main(String[] args) {
System.out.println(Foo.classVar);
// System.out.println(Foo.instanceVar);
Foo.classMethod();
// Foo.instanceMethod();
Foo f1 = new Foo(); // f1 인스턴스 생성
Foo f2 = new Foo(); // f2 인스턴스 생성
System.out.println(f1.classVar); // I class var
System.out.println(f1.instanceVar); // I instance var
f1.classVar = "changed by f1"; // f1의 classVar 변수를 변경 -> 클래스와 모든 인스턴스도 같이 변경
System.out.println(Foo.classVar); // changed by f1
System.out.println(f2.classVar); // changed by f1
f1.instanceVar = "changed by f1"; // f1의 인스턴스 변수를 변경 -> 본인 인스턴스만 변경
System.out.println(f1.instanceVar); // changed by f1
System.out.println(f2.instanceVar); // I instance var
}
}