JAVA

[JAVA] static에 대하여

날아 2023. 1. 29. 20:48

1. Static이란 

  • 자바에서 static 키워드를 사용한다는 것은 메모리에 한 번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 이를 정확히 이해하기 위해선 메모리 영역을 알아야 한다. 

  • ClassStatic 영역에 생성된다. 
  • new 연산을 통해 생성된 객체는 Heap 영역에 생성된다.
  • 객체의 생성시에 할당된 Heap 영역의 메모리는 가비지 콜렉터(GC)를 통해 수시로 관리된다. 
  • Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리 
  • GC영역밖에 존재하므로 Static을 과용할 경우 시스템의 퍼포먼스에 악영향을 주게 된다. 
static 변수와 static 메소드는 객체가 생성되기 이전에 이미 할당되어 있다. 따라서 객체의 생성없이 바로 사용할 수 있다. 

2. Static 변수(정적 변수)

  • 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수 
  • 일반적으로 static 변수는 public static final로 활용된다. 
  • 여러 객체가 해당 메모리를 공유하고, 변하지 않는 상수이기 때문이다. 

3. Static 메소드(정적 메소드)

  • 객체의 생성 없이 호출 가능한 메서드
  • 객체내에서 호출이 가능하지만 지양한다. 
  • ex) Math.random()
public class item {
    private String car = "morning";
    private static String phone = "iphone13";
 
         
    public static void printName(){
       // System.out.println(car); 불가능한 호출
       System.out.println(phone);
    }
}

위 코드에서처럼 static 메소드에서 static이 선언되지 않은 변수에 접근이 불가능하다. (iv사용 불가) 

이는 메모리 할당과 연관지어 생각하면 당연하다. 

car는 new 연산을 통해 객체가 생성된 후에 메모리가 할당된다. 

하지만 static 메소드는 객체의 생성 없이 접근하는 함수이므로, 할당되지 않은 메모리 영역에 접근이 불가하다. 


3. 활용법 

static 변수

일반적으로 상수들만 모아서 사용하며 상수의 변수명은 대문자와 _를 조합하여 이름짓는다. 

public class ItemName {
 
    public static final String CAR_NAME = "morning";
    public static final String PHONE_NAME = "iphone13";        
 
}