bergerac 2025. 3. 9. 09:11

final키워드란?

  • final은 값을 변경할 수 없도록 제한하는 키워드로, 변수 메서드, 클래스에서 사용할 수 있다.
  • 불변성(immutability)보장을 위해 자주 사용된다.
  • 안정성과 보안성이 향상되지만 유연성이 감소하고 초기화방식이 제한된다.

1. final 변수

  • 변수에서는 주로 값을 변경할 수 없는 상수를 선언할 때 사용한다.
  • 선언과 동시에 초기화를 해주어야 하며 재할당이 불가능하다.
  • UPPER_SNAKE_CASE(전체 키워드를 대문자로 작성)
final int FINAL_VARIABLE = 30;

<생성자에서 초기화 하는 방법>

class Student {
    private final String studentId; // 학번은 변경 불가

    public Student(String studentId) {
        this.studentId = studentId; // 생성자를 통해 초기화
    }

    public String getStudentId() {
        return studentId;
    }
}

final 변수는 생성자를 통해 한번만 할당할 수 있으며 이후 변경이 불가능하다.

2. final 메서드

  • 자식 클래스에서 재정의(Override)할 수 없는 메서드를 선언한다. final method는 재정의 될 수 없다.
  • 핵심 로직이 변경되지 않도록 보호해야 할 때 사용합니다.
  • 보안이 중요한 메서드나 변경하면 안되는 API에서 사용합니다.
[접근제어자] final 반환타입 메서드명() {}

 

class Parent {
    public final void showMessage() {
        System.out.println("이 메서드는 재정의할 수 없습니다.");
    }
}

class Child extends Parent {
    // ❌ 컴파일 오류 발생: Cannot override the final method
    // public void showMessage() {
    //     System.out.println("재정의 시도!");
    // }
}

3. final 클래스

상속될 수 없는 클래스이다 즉 final 클래스를 부모클래스로 활용할 수 없다.

final class 클래스명 {}
final class Example1 {}
// class Example2 extends Example1 {}

두번째 줄의 경우에는 final 클래스를 확장하려고 시도했기 때문에 에러가 뜨게 된다. 

 

final과 static final 차이점

final 변경할 수 없는 변수, 메서드, 클래스
static final 전역 상수로 사용됨 (클래스 레벨에서 공유)

🔹 static final 예제

class Config {
    public static final String APP_NAME = "MyApplication";
    public static final int MAX_USERS = 100;
}

 활용: static final은 프로그램 전반에서 공유되는 상수로 자주 사용됨.