Static 메소드란 무엇인가
일반적으로 클래스내의 멤버들을 호출하고 싶으면 클래스 객체를 생성해야한다.하지만 static 메소드를 선언하면 객체 선언 없이 메소드를 단독으로 호출할수있다. 즉 static 을 붙이게 되면 모든 객체가 다같이 공유하는 메소드가 되는 것이다. static 메소드에서는 static이 선언되지 않은 변수에 접근이 불가능하다.기존 변수는 new 연산을 통해 객체가 생성된 후에 메모리가 할당됩니다.하지만 static 메소드는 객체의 생성 없이 접근하는 함수이므로, 할당되지 않은 메모리 영역에 접근을 하므로문제가 발생하게 됩니다. 그러므로 static 변수에 접근하기 위한 메소드는 반드시 static 메소드가 되어야 합니다.
Static 변수란 무엇인가
일반적으로 우리가 만든 class는 static 영역에서 생성되고, new 연산자를 통해 생성된 객체는 Heap영역에 생성된다. 그러면 Java Garbage collector를 통해 수시로 메로리 관리를 받는다. 하지만 static영역에 할당된 메모리는 모든 객체가 공유하는 메모리이다.하지만 Garbage collector관리 영역 밖에 존재하기 때문에 Static을 자주 사용하면 프로그램 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 된다. 그러면 어떨 때 Static 변수를 사용하면 좋을까 ? 자주 쓰이는것 ,상수 final과 자주 쓰인다.
class Count{
static final float pi = 3.14f;
static int age =26;
static void talk(int pi){
System.out.println(pi);
}
}
public class stat {
public static void main(String[] args) {
System.out.println(Count.pi);
Count.age = 3;
System.out.println(Count.age);
Count.talk(Count.age);
}
}