728x90
🔹 final 클래스와 final 메소드
final 키워드는 클래스, 메소드, 변수에 사용할 수 있으며, 각각의 의미가 다릅니다.
이번에는 final 클래스와 final 메소드에 대해 설명하겠습니다.
1️⃣ final 클래스
final 클래스는 상속할 수 없는 클래스입니다.
즉, final로 선언된 클래스는 다른 클래스가 extends를 통해 상속받을 수 없습니다.
✅ 사용 예시
final class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
// 아래 코드는 오류 발생! (final 클래스는 상속 불가)
// class Dog extends Animal { } ❌ 오류 발생!
✅ 특징
- final이 선언된 클래스는 상속이 불가능하므로, 기능을 확장할 수 없음.
- 보안이 중요한 경우(예: String, Integer 같은 불변 클래스) 사용됨.
- API에서 설계자가 클래스를 변경할 수 없도록 보호할 때 사용.
2️⃣ final 메소드
final 메소드는 오버라이딩(Overriding)할 수 없는 메소드입니다.
즉, 해당 메소드는 자식 클래스에서 재정의할 수 없습니다.
✅ 사용 예시
class Parent {
final void showMessage() {
System.out.println("This is a final method");
}
}
class Child extends Parent {
// ❌ 오류 발생! (final 메소드는 오버라이딩할 수 없음)
/*
void showMessage() {
System.out.println("Trying to override");
}
*/
}
✅ 특징
- final 메소드는 자식 클래스에서 변경할 수 없음.
- 중요한 로직(예: 보안 관련 로직)이나 변경하면 안 되는 핵심 기능을 보호하기 위해 사용됨.
- final 메소드를 사용하면 컴파일러가 성능 최적화(JIT 최적화)를 수행할 수도 있음.
3️⃣ final 클래스 vs final 메소드 비교
| 구분 | final 클래스 | final 메소드 |
| 기능 | 상속을 금지함 | 오버라이딩을 금지함 |
| 목적 | 클래스의 변경을 막음 | 특정 메소드의 변경을 막음 |
| 사용 예 | String, Integer, Math 클래스 | Object 클래스의 finalize() 메소드 등 |
| 자식 클래스에서 | 상속 불가 | 메소드 재정의 불가 |
🔥 final을 언제 사용하면 좋을까?
- 보안이 중요한 클래스 → 상속을 막고 싶다면 final 클래스 사용
- 핵심 기능을 보호 → 오버라이딩되면 안 되는 메소드는 final 선언
- 성능 최적화 → 자바 컴파일러가 final 메소드를 인라인 최적화 가능
🎯 정리
- final 클래스 → 상속 금지! (extends 불가)
- final 메소드 → 오버라이딩 금지! (@Override 불가)
✔ 변경되면 안 되는 중요한 로직을 보호하기 위해 final을 적절히 사용하면 좋습니다.
728x90
'개발 > 자바' 카테고리의 다른 글
| 중첩 클래스 (Nested Class) - Inner Class vs Static Nested Class (0) | 2025.02.18 |
|---|---|
| final 변수와 final 전달인자 (0) | 2025.02.18 |
| protected 접근 제어자 다른 패키지 상속 방법 (0) | 2025.02.18 |
| 메소드 접근 제어자 public, protected, private, default (0) | 2025.02.18 |
| java : import static (0) | 2025.02.18 |