개발새발

final 과 static final 의 차이? 본문

java

final 과 static final 의 차이?

무비인 2022. 2. 20. 18:53

매직 넘버/매직 리터럴을 static final로 선언하는 이유가 뭘까?

범위를 표현하거나, 출력문을 사용하면서 이전에 읽었던 자바 코딩의기술 내용 중 매직넘버를 상수로 대체 하라는 내용이 떠올랐다.

그래서 static final 을 사용해서 구현했는데,

문득 불변함을 표시하고 변수명으로 사용 의미를 표현하려면 final로도 충분하지 않나? 라는 생각이 들었고 알아보기로 했다.

매직 넘버/매직 리터럴

프로그래밍에서 상수로 선언하지 않은 숫자를 매직 넘버, 문자열을 매직 리터럴이라고 한다.


final

final은 해당 오브젝트가 단 한번 할당할 수 있음을 의미한다. 즉 값이 변하지 않음을 의미한다.


static

데이터가 프로그램 실행 직후부터 끝날 때까지 메모리 수명이 유지됨을 의미한다.


매직 넘버/매직 리터럴을 static final로 선언하는 이유가 뭘까?

이 값들은 모든 클래스 인스턴스에서 똑같이 사용할 값이기 때문에,

클래스 레벨에서 처음 한번만 하나의 메모리 공간을 할당하고 계속 사용하면 메모리 절약이 가능하기 때문임을 알게 되었다.


느낀점

해당 내용을 찾아보며 미션으로 짠 코드가 static final 의 장점을 못살리고 있다고 느꼈다. 

리팩토링 해야겠다.

그리고 네이밍을 할 때  어떻게하면 더 직관적으로 사용 의미가 들어나게 할지? 고민해봐야겠다.

참고