인스턴스
클래스와 인스턴스 차이점은 클래스가 원본이라면 인스턴스는 원본의 구성을 일부 바꿀 수 있다
인스턴스는 클래스를 재료로 사용할 때 세분화시키고 싶다면 클래스의 내용을 일부 바꾸고 이름으로 구분지어 쓸 수 있다
인스턴스로 사용할 때에는 static을 제거해주어야 한다
class Print {
public String delimiter = "";
public void A() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
public class MyOOP {
public static void main(String[] args) {
Print p1 = new Print();
p1.delimiter = "----";
p1.A();
p1.A();
p1.B();
p1.B();
Print p2 = new Print();
p2.delimiter = "****";
p2.A();
p2.A();
p2.B();
p2.B();
p1.A();
p2.A();
p1.A();
p2.A();
}
}
static
Static은 Class 소속이고 Static이 없으면 Instance 소속으로 보면 된다
Class 로 Instance를 복사해서 만들었을 때, Instance 안에 들어가있는 Static 값을 변경하면 기존에 있는 method,Variable 의 값도 같이 변경된다.
Instance 안에 들어가있는 Static이 없는 Instance method,Variable의 값을 변경할 경우 복제품인 Instance 에만 적용된다.
Class 소속에선 Instance를 부를수 없지만, Instance 소속에선 Class,Instance 모두 부를수 있다.
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); // Error
}
}
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
}
}