Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 main() 메소드를 final로 선언할 수 있을까?

네, Java에서 main() 메소드를 final로 선언하는 것이 가능합니다. 컴파일러는 아무런 오류도 발생시키지 않으며, 프로그램도 정상적으로 실행됩니다.

final 메소드란?

  • final 키워드를 메소드 선언 앞에 붙이면 해당 메소드는 final 메소드가 됩니다.
  • Java에서 final 메소드의 가장 큰 목적은 오버라이딩(메소드 재정의)을 금지하는 것입니다.
  • 따라서 하위 클래스(서브클래스)에서는 final 메소드를 재정의할 수 없습니다.
  • 상속 구조에서 특정 메소드가 자식 클래스에서 임의로 변경되지 않아야 한다면, 해당 메소드를 final로 선언하여 재정의를 차단할 수 있습니다.
  • final 메소드는 하위 클래스에서 호출(접근)은 가능하지만, 재정의는 불가능합니다.

예제 코드

아래 예제는 main() 메소드에 final 키워드를 함께 사용한 모습입니다. 컴파일과 실행이 문제없이 진행되는 것을 확인할 수 있습니다.

class BaseClass {
    public final void show(Object o) {
        System.out.println("BaseClass method");
    }
}
class DerivedClass extends BaseClass {
    public void show(Integer i) { // 매개변수가 다른 오버로딩(Overloading)
        System.out.println("DerivedClass method");
    }
}
public class Test {
    public static final void main(String[] args) { // main() 메소드를 final로 선언
        BaseClass b = new BaseClass();
        DerivedClass d = new DerivedClass();
        b.show(new Integer(0));
        d.show(new Integer(0));
    }
}

실행 결과

BaseClass method
DerivedClass method

참고 사항

위 예제에서 DerivedClassshow(Integer i) 메소드는 부모의 show(Object o)를 재정의한 것이 아니라 매개변수 타입이 다른 오버로딩입니다. 만약 동일한 시그니처로 재정의하려고 시도하면 컴파일 오류가 발생합니다.

또한 main() 메소드는 JVM이 클래스 이름을 기준으로 직접 찾아 호출하기 때문에 final로 선언해도 프로그램 실행에는 전혀 영향을 주지 않습니다. 이처럼 final 키워드는 메소드의 재정의 여부만 제어할 뿐, 호출 가능성이나 실행 자체를 제한하지 않습니다.