Java
언어를 많이 사용했지만, final
이 불변의 의미를 갖는다 라고 너무 추상적으로 생각했다.
final
이 변수, 메서드, 클래스에 사용될 때 어떻게 동작하는지 명확히 이해하고 사용해야할 필요성을 느꼈다.
한번 값을 선언하면 Immutable 형식(값 변경이 불가능한)이 된다. (variable, arguments)
final String x = "chan";
x = "chany"; // 컴파일 에러 (변경 불가)
public void func(final String x) {
x = "chany"; // 컴파일 에러 (변경 불가)
}
상속하는 것을 허용하지 않는다.
final calss LCH {
final String x;
public LCH() {
x = "chan";
}
}
class newLCH extends LCH {} // 컴파일 에러 (상속 불가)
메서드의 오버라이딩을 금지시킨다.
(클래스의 상속은 되지만 메서드를 재정의하여 사용할 수 없다.)
class LCH {
final String x = "chan";
final String getChan() {
return x;
}
}
class newLCH extends LCH {
@Override
String getChan() { // 컴파일 에러 (오버라이딩 불가)
return "newChan";
}
}
개인적으로 final
을 변수 외에 사용할 일이 많이 없었는데, 팀 프로젝트를 수행할 때 final
을 사용하면 명확하게 의도를 파악하고 개발할 수 있다는게 가장 큰 장점인 것 같다고 느꼈다.
출처