티스토리 뷰
static과 non-static의 차이
static : class 소속, 같은 메모리에 저장되기 때문에 값이 변하면 다른 객체에도 영향을 준다.
non-static : instance 소속, 다른 메모리에 저장되기 때문에 값이 변해도 다른 객체에 영향을 주지 않는다.
소스코드
class Print {
public String delimiter;
public void a() {
System.out.println(this.delimiter);
System.out.println("a");
System.out.println("a");
}
public void b() {
System.out.println(this.delimiter);
System.out.println("b");
System.out.println("b");
}
public static void c(String delimiter){
System.out.println(delimiter);
System.out.println("b");
System.out.println("b");
}
}
class Main {
public static void main(String[] args) {
Print t1 = new Print();
t1.delimiter = "-";
t1.a();
t1.b();
//class소속의 method이기 때문에 이런식으로 호출 가능
Print.c("$");
Print t2 = new Print();
t2.delimiter = "*";
t2.a();
t2.b();
}
}
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); //ok
}
}
public class Main {
public static void main(String[] args) {
// class를 통해서 직접 instance 변수와 instance method에 접근하는 것은 금지되어 있다.
System.out.println(Foo.classVar); //ok
//System.out.println(Foo.instanceVar); //error
Foo.classMethod(); //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
// static 변수나 method는 class에 있는 변수나 method와 연결되어 있는다.
f1.classVar = "changed by f1";
System.out.println(Foo.classVar); // changed by f1
System.out.println(f2.classVar); // changed by f1
// instance 변수나 method는 class에 있는 변수나 method와 독립적이다.
f1.instanceVar = "changed by f1";
System.out.println(f1.instanceVar); // changed by f1
System.out.println(f2.instanceVar); // I instance var
}
}
참조
https://opentutorials.org/course/4024/26913
https://opentutorials.org/course/4074/27016
'Language > Java' 카테고리의 다른 글
JSP(JavaServer Pages) (0) | 2020.12.17 |
---|---|
Servlet 생명주기 (0) | 2020.12.09 |
접근제어자(Access Modifiers) (0) | 2020.12.09 |
Overriding vs Overloading (0) | 2020.12.08 |
문자의 비교 (0) | 2020.12.06 |
댓글