자바에서 변하지 않는 값을 담는 변수를 지정할 때, 혹은 상속이 되지 않는 클래스나 메서드를 지정할 때 final
키워드를 사용합니다. 마치 자바스크립트에서 변수를 상수로 만드는 const
키워드나 객체를 더 이상 수정할 수 없게 만드는 freeze
메서드처럼 말이죠.
그러나 키워드가 분리되어있는 자바스크립트와는 달리 자바에서 final
키워드는 변수 뿐만 아니라 클래스, 메서드 등에도 광범위한 역할로 사용된다는 차이점이 존재합니다.
- final 변수 : 선언한 변수에 값을 딱 한번만 선언 한 뒤 재할당 불가능
public class Main { public static void main(String[] args) { final int CONSTANT_VALUE = 10; // final 변수 선언 // CONSTANT_VALUE = 20; // 컴파일 오류: final 변수는 값 변경 불가능 System.out.println("Value is: " + CONSTANT_VALUE); // 10 출력 } }
- final 클래스 : 해당 클래스를 다른 클래스에 상속하는 행위 불가능
// Parent 클래스를 final로 지정 public final class Parent { void display() { // display 메서드를 final 메서드로 지정 System.out.println("This is a final method."); } } // 오류 발생 : final 클래스를 상속할 수 없음 class Child extends Parent { // 오류 발생: final 메서드를 오버라이드할 수 없음 // void display() { // System.out.println("This is an overridden method."); // } }
- final 메서드 : 클래스를 상속 받는 다른 클래스가 해당 메서드를 오버라이딩(재정의) 할 수 없음. (단 호출은 가능)
class Parent { final void method() { // 메서드 내용 } } class Child extends Parent { // 오류: final 메서드는 오버라이딩할 수 없음 void method() { // 오버라이딩 시도 } }