개발공부/자바

정적 변수, 메서드, 클래스, static static static

장아장 2023. 1. 2. 16:17

 

이젠 이거 알아도 '틀' 이라며?

자바 프로젝트를 새로 만들면 항상 보이는 놈이 있다. 

public static void main(String[] args) {
   SpringApplication.run(BoardUpgradedApplication.class, args);
}

이런식으로 존재하는 static 메서드가 존재한다. 

 

근데 우리가 만드는 일반적인 클래스, 메서드, 변수들은

public class BoardUpgradedApplication

이런식으로 static이 아닌 클래스, 메서드, 변수를 쓴다. 

 

이렇게 static이 붙은 것들을 '정적'을 앞에 붙여 부른다. 

정적 클래스나 이런 것들의 특징이 무엇일까?

static이 붙은 것들은 상위 객체와 수명을 같이한다. 

즉, static클래스는 프로젝트와 시작과 끝을 같이하고, static 메서드는 소속된 클래스와 수명을 같이하며 static 변수는 메서드와 수명을 같이한다. 

이렇게 같이 도는 이유는, 이들의 메모리 때문이다. 

 

기본적인 자바의 메모리는 Heap 메모리로 저장된다. Static 메모리는 따로 저장되는데, 이 static메모리에 저장되는 순간 모든 클래스에서 불러와 사용할 수 있게 된다. Garbage Collection(즉, 쓰이지 않으면서 불러져 메모리를 잡아먹는 것들)에 관여를 하지 않는 장점이 있다. 

 

그렇다고 장점만 있지는 않다. 이들이 호출되면 상위 객체의 수명까지 메모리를 잡아먹는다. 

즉 한번 쓰고 말 클래스가 static이다? 한번 쓰고 쓸 일도 없는데 프로젝트의 끝까지 수명을 같이하는 것이다. 

 

이러한 부분때문에 static을 쓸 땐 조심해야 할 필요가 있다.