생활코딩/생활코딩 Java

Java_객체 지향 프로그래밍 - static

양상추상츄 2021. 10. 13. 11:11

https://www.youtube.com/watch?v=hvTuZshZvIo 

 

static 클래스변수, static 클래스 메소드 값을 바꾸면 모든 인스턴스 static의 값이 바뀜

반대로 인스턴스의 static 값을 변경해도 클래스 그리고 클래스의 static을 사용하고 있는 모든 인스턴스의 값도 변경됨 

 

package projectOOP;

class Foo {
    public static String classVar = "I class var";
    public String instanceVar = "I instance var";
    

    public static void classMathod() {
        System.out.println(classVar);
        //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.intanceVar); //Error 인스턴스 변수인데 클래스로 불러왔기 때문에
        Foo.classMathod(); //OK
        //Foo.instanceMethod(); //Error 클래스.인스턴스 메소드는 호출 할 수 없다

        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"; // 인스턴스에서 바꿔도 static은 연결되 있어서 모두 변함
        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
        //System.out.println(Foo.instanceVar);// 클래스.인스턴스 불가
    }

}