웹개발/JAVA
final
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은 프로그램 전반에서 공유되는 상수로 자주 사용됨.