개발/자바

final 클래스와 final 메소드

피터JK 2025. 2. 18. 10:51
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을 언제 사용하면 좋을까?

  1. 보안이 중요한 클래스 → 상속을 막고 싶다면 final 클래스 사용
  2. 핵심 기능을 보호 → 오버라이딩되면 안 되는 메소드는 final 선언
  3. 성능 최적화 → 자바 컴파일러가 final 메소드를 인라인 최적화 가능

🎯 정리

  • final 클래스 → 상속 금지! (extends 불가)
  • final 메소드 → 오버라이딩 금지! (@Override 불가)

변경되면 안 되는 중요한 로직을 보호하기 위해 final을 적절히 사용하면 좋습니다. 

728x90