소스코드를 보다보면 특정한 숫자 매직넘버(Magic Number)를 직접 작성하는 나쁜 스타일의 코드를 볼 수 있습니다.
만약에 캐싱으로 캐싱값들을 강제로 업데이트하는 로직이 있다고 가정해보겠습니다. 여기에서 캐시에 대한 시간값을 지정했다고 가정하면 다음과 같이 코드를 작성하는것이 올바른 코드 일까요? 아닙니다. 저렇게 내부적으로 상수값들을 선언을 해주게 되면 유지보수측면이나 코드의 가독성측면에서 좋지 않은 결과를 가져다 줄 것입니다.
다음과 같이 매직넘버를 기호 상수로 선언하여 클린코드의 습관을 들여야합니다. 혹은 enum이나 public static final 클래스 필드를 사용하여 명확한 값들을 지정해주어야합니다. 실수를 줄일 수 있고, enum을 사용하여 상수값으로 매직넘버를 직접 사용해도 문제없이 컴파일시점에 처리가 가능합니다.
final variable
변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 됩니다.
finally
try-catch or try-catch-resource 구문을 사용할 때, 마무리처리 작업 로직을 넣어야할때 사용합니다.
finalize()
keyword 도 아니고 code block 도 아닌 메소드입니다. 해당 메소드는 GC에 의해 호출되는 함수로 절대 호출해서는 안되며 Object 클래스에 정의되어 있으며 GC 가 발생하는 시점이 불분명하기 때문에 해당 메소드가 실행된다는 보장이 없습니다. 한 finalize() 메소드가 오버라이딩 되어 있으면 GC 가 이루어질 때 바로 Garbage Collecting 되지 않기때문에 GC 가 지연되면서 OOME(Out of Memory Exception)이 발생할 수 있는 이슈가 존재합니다.