예를 들어,
개발자가 아래와 같이 PI를 사용하고 싶다고 치자.
final double PI = 3.1415926543; // final 사용
double circleArea;
double radius = 3;
circleArea = radius * radius * PI;
System.out.print(circleArea);
그런데 개발자가 몇 천자쯤 되는 긴 코드에서 쓰다가 이런 실수를 저질렀다.
double PI = 3.1415926543;
.
.
.
int PI = 3; // PI 값 중복선언
이렇게 되면 개발자가 원하는 결과가 나오지 않고, 오류도 뜨지 않아서 매우 곤란하게 된다.
이러한 곤란한 상황을 막기 위해 final
이 있는 것이다.
프로그램 자체에서 fianl
은 있든 없든 상관없다.
다만 개발자가 목적한 결과를 위해 존재한다.
코드를 작성하다가 임의로 상수값을 변환하는 불상사가 일어나지 않도록 막는 일종의 장치를 넣어둔 셈이다. 위와 같은 중복선언 실수로 인해 오류 메시지가 뜨면 즉각적으로 반응할 수 있도록.
참고로 c 등과 같은 언어의 const
도 같은 역할을 한다.
- 타입 선언만 해도 변수를 설정할 수 있는데 왜 굳이
final
을 쓰나요?
-fianl
의 필요성을 제대로 몰랐기에 든 의문이었고, 해결됐다.
final
로 선언할 수 있는 상수는 값이 변하지 않는다는데, 왜 '강제타입변환' 하면 변하나요?
- 이것 또한 당연한 것이다.fianl
로 선언헀다고 타입이 절대적으로 변하지 않는 건 아니다.final
의 필요성과 관련해서 보면 사용자의 중복선언을 막기 위한 장치일 뿐이기 때문에 계산 시 타입변환은 막을 이유가 없다.