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);// 클래스.인스턴스 불가
}
}
'생활코딩 > 생활코딩 Java' 카테고리의 다른 글
Java_객체 지향 프로그래밍 - 활용 - 클래스화 (0) | 2021.10.13 |
---|---|
Java_객체 지향 프로그래밍 - 생성자와 this (0) | 2021.10.13 |
Java_객체 지향 프로그래밍 - 인스턴스 (0) | 2021.10.13 |
Java_객체 지향 프로그래밍 - 클래스 - 존재 이유와 기본형식 (0) | 2021.10.13 |
Java 객체 지향 프로그래밍 - 변수와 메소드 (0) | 2021.10.13 |