final 키워드는 자바에서 "변경불가", "확장불가"의 의미를 가지는 제어자임
클래스, 메서드, 변수에 사용할 수 있으며 사용하는 위치에 따라 의미가 달라진다
1. 위치에 따른 의미 정리
- 클래스 : 상속이 불가능한 클래스
- 메서드 : 오버라이딩이 불가능한 메서드
- 변수 : 값 변경이 불가능한 상수, 일반적으로 static이 함께 붙으며 한번만 할당이 가능하다
final은 결국 대상의 변경이나 확장 자체를 금지하는 키워드라는 점에서 어떤 위치에서든 공통적인 성격을 가진다
예
final class FinalClass {
final int x = 100; // final, 변경 불가
final int getValue() { // 오버라이딩 할 수 없음
final int localVar = x; // 지역 상수
return localVar;
}
}
class SubClass extends FinalClass {
// 컴파일 에러가 발생함. final 클래스는 상속할 수 없다
// public int getValue() { } 를 활용하여 오버라이딩도 할 수 없다
}
1. final 변수
- 초기화 후에 값을 변경할 수 없다
- 선언 시 반드시 값을 할당하거나 생성자에서 한번만 초기화할 수 있다
class Example {
final int number; // 생성자에서 초기화할 수 있다
Example(int number) {
this.number = number; // 한번만 초기화할 수 있다, 이후에는 불가
}
}
2. final 메서드
- 메서드가 하위 클래스에서 재정의(오버라이딩) 되지 않도록 막는다
- 보안 또는 설계 목적으로 메서드의 구현을 고정하고자 할 때 사용한다
3. final 클래스
- 클래스가 상속되지 않도록 제한한다
- java.lang.String, java.lang.Math 등등..
final class ConnotExtend {
}
class TryExtends extends ConnotExtend {
// 컴파일 에러 일어남
}
정리
- final은 수정 또는 확장 금지를 의미하는 제어자임
- 클래스, 메서드, 변수 어디에 붙는지에 따라 구체적인 제약이 달라진다
- 설계의 안정성, 보안성, 유지보수성을 높이기 위해 자주 사용된다
'JAVA > 추상화(Abstraction)' 카테고리의 다른 글
| 추상 클래스와 인터페이스, 선택 기준과 활용 전략에 대해 (0) | 2026.04.21 |
|---|---|
| 인터페이스(interface) (0) | 2026.04.21 |
| 추상 클래스 (0) | 2026.04.20 |
| abstract 제어자 (0) | 2026.04.20 |
| 추상화(Abstraction) (0) | 2026.04.20 |