Static

  • 실행하자마자 메모리에 고정적으로 할당되어 종료될 때 해제되는 변수나 메서드
  • Static 변수 = 클래스 변수
  • Static 메서드 = 클래스 메서드
  • 클래스 변수는 인스턴스를 생성하지 않고 사용할 수 있음
  • 프로그램이 실행될 때, 즉, 클래스가 메모리에 올라갈 때 자동적으로 생성되기 때문임
  • 그래서 호출이 되면 찾는 과정이 없기 때문에 호출 시간이 빠름
  • 모든 인스턴스가 공통적으로 사용해야 하는 멤버 변수에 붙임
  • 인스턴스는 각각 독립적이기 때문에 서로 다른 값을 유지함
  • 프로그램 실행 시 생성되고, 종료 시 없어지기 때문에 GC(Garbage Collectior)의 관리를 받지 않음
  • 하지만 종료까지 메모리가 할당된 채로 존재하기 때문에 자주 사용하게 되면 성능에 영향을 줌
  • 클래스 메서드에서는 non static 변수, 즉, 인스턴스 변수를 사용할 수 없음
  • 호출 시점에 사용하는 인스턴스의 생성 여부를 알 수 없기 때문임
  • 메서드 내에서 인스턴스 변수를 사용하지 않는다면 메서드에 static 붙이는 것을 고려

 

▽ 예제 코드 1 ▽

public class Temp {
	
	public int a; // instance member field
	public static int b; // class member field, 전역 변수
	// static 변수는 instance 내부에 생성되지 않음
	// new 선언할 때 생성되지 않고, 프로그램이 실행될 때 생성됨
	// Heap 메모리가 아닌 data 메모리에 생성됨
	
}

 

▽ 예제 코드 2▽

		// static 변수는 인스턴스를 생성하지 않아도 바로 사용 가능
		// 인스턴스들 간의 공유 변수
		Temp.b = 50;
		
		Temp t1 = new Temp();
		Temp t2 = new Temp();
		Temp t3 = new Temp();
		
		System.out.println(t1.b);
		System.out.println(t2.b);
		
		t1.b = 30;
		System.out.println(t3.b);

 

 

 

 

+ Recent posts