final 키워드

2024. 9. 17. 09:37정보처리,전산/JAVA

반응형

Java에서 final 키워드를 함수(메서드)에 사용하는 이유는 메서드를 더 이상 오버라이드할 수 없도록 방지하여 자식 클래스에서 부모 클래스의 final로 선언된 메서드를 재정의하지 못하게 하는 것이 final 메서드의 역할이다.

  1. 메서드의 행동을 보장하고 싶을 때: 어떤 메서드의 특정 동작을 자식 클래스에서 변경할 수 없도록 해야 하는 경우가 있다. , 보안 관련 메서드나 라이브러리 코드에서 중요한 로직을 담고 있는 메서드는 재정의되지 않도록 해야 한다.
  2. 성능 최적화: 자바 컴파일러는 final 메서드를 인라인으로 최적화할 수 있다. 즉, 메서드 호출을 줄여 성능을 향상시킬 수 있다. 그러나 이는 자바 컴파일러가 수행하는 최적화의 일환이며 모든 경우에 적용되는 것은 아니다.
  3. 디자인 목적: 클래스 설계 시, 메서드의 오버라이딩을 의도적으로 막음으로써 하위 클래스가 부모 클래스의 중요한 동작을 변경하지 못하도록 할 수 있다.
package ex;



class Parent {
    // final 메서드: 이 메서드는 자식 클래스에서 오버라이드할 수 없습니다.
    public final void displayMessage() {
        System.out.println("This is a final method in the Parent class.");
    }
    
    // 일반 메서드: 이 메서드는 오버라이드 가능합니다.
    public void showMessage() {
        System.out.println("This is a non-final method in the Parent class.");
    }
}

class Child extends Parent {
    // final 메서드는 오버라이드할 수 없습니다.
    // public void displayMessage() {
    //     System.out.println("Trying to override final method."); // 컴파일 오류 발생
    // }

    // 오버라이드 가능한 메서드
    @Override
    public void showMessage() {
        System.out.println("This is an overridden method in the Child class.");
    }
}

public class FinalMethodExample {
    public static void main(String[] args) {
        Child child = new Child();
        
        // final 메서드 호출 (오버라이드 불가)
        child.displayMessage();  // 출력: This is a final method in the Parent class.
        
        // 오버라이드된 메서드 호출
        child.showMessage();     // 출력: This is an overridden method in the Child class.
        
        
    }
}
반응형