티스토리 뷰

Language/Java

static

Seogineer 2020. 12. 8. 00:11

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
댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글