자바에서 필드 및 메서드 앞에 static 키워드를 붙혀있는것을 흔히 볼수 있다. 이를 정적필드 또는 정적 메서드라 하는데, 일반적인 인스턴스의 변수와 메서드와 달리 메모리의 static영역에 올라가기 때문에 따로 객체 생성 없이 바로 사용가능하다.
일반적인 메서드는 Heap영역에 올라가 GC(c언어의 free를 해주는 JVM의 기능)에 의해 자동으로 관리되게 된다. 즉 사용하지 않는 객체(선언되지 않은 객체)의 경우 알아서 삭제시킴으로써 메모리를 관리해준다.
선언
staic변수
public class Constant {
public static final String START_GAME_MENT = "숫자 야구 게임을 시작합니다.";
}
-------------------------------------
static메서드
public class Computer {
public Computer() {
}
public static String createValidBaseballNum() {
List<String> baseballNum = new ArrayList<>();
while (baseballNum.size() < BASEBALL_NUM_LIMIT_LENGTH) {
String invalidNum = String.valueOf(Randoms.pickNumberInRange(1, 9));
if (Validator.validNumNotInList(invalidNum, baseballNum)) {
continue;
}
baseballNum.add(invalidNum);
}
return String.join("", baseballNum);
}
}
사용
public void startGame() {
String baseballNum = Computer.createValidBaseballNum();
playGame(baseballNum);
}
주의점
그냥 다 static으로 선언하는면 생성하지 않고 너무 편하지 않을까?
NO!