본문 바로가기
Language/Java

[JAVA] final 메서드는 오버라이딩이 가능한가요? 설계의 마침표를 찍는 법

by Papa Martino V 2026. 1. 17.
728x90

final 메서드
final Method

 

객체지향 프로그래밍(OOP)의 핵심 중 하나는 상속과 다형성입니다. 자식 클래스가 부모 클래스의 기능을 물려받아 자신만의 방식으로 재정의하는 '오버라이딩(Overriding)'은 자바 개발자에게 매우 익숙한 개념이죠. 하지만 때로는 부모의 기능을 절대 바꾸지 못하도록 '보호'해야 할 때가 있습니다. 이때 사용하는 키워드가 바로 final입니다. 오늘은 "Java final 메서드는 오버라이딩이 가능한가요?"라는 질문에 대한 명확한 답변과 함께, 왜 우리가 실무에서 이 키워드를 신중하게 사용해야 하는지 깊이 있게 다뤄보겠습니다.


1. 결론: final 메서드는 오버라이딩할 수 없습니다

자바에서 메서드 선언부에 final 키워드가 붙으면, 해당 메서드는 최종적인 상태임을 의미합니다. 즉, 하위 클래스에서 이 메서드를 상속받을 수는 있지만, 내용을 변경하거나 재정의(Overriding)하려 시도하면 컴파일 에러가 발생합니다.

컴파일 에러 메시지 예시:
'methodName()' cannot override 'methodName()' in 'ParentClass'; overridden method is final

2. 왜 final 메서드를 사용하는가? (설계적 가치)

단순히 "못하게 막는다"는 개념을 넘어, final 메서드는 시스템의 안정성을 보장하는 강력한 설계 도구입니다.

  • 보안 및 무결성 유지: 시스템의 핵심 로직이나 인증 프로세스 등 자식 클래스에서 임의로 수정했을 때 심각한 보안 결함을 초래할 수 있는 부분에 적용합니다.
  • 템플릿 메서드 패턴(Template Method Pattern): 알고리즘의 뼈대를 부모 클래스에 정의하고, 특정 단계만 자식에서 구현하게 할 때, 전체적인 흐름을 제어하는 메서드를 final로 선언하여 실행 순서가 뒤바뀌지 않도록 보호합니다.
  • 성능 최적화: 과거의 자바 가상 머신(JVM)은 final 메서드를 인라인(Inline) 처리하여 호출 속도를 높이기도 했습니다. 현대의 JIT 컴파일러는 더욱 똑똑해졌지만, 여전히 정적 바인딩의 힌트를 제공하는 역할을 합니다.

3. Java 예약어 final의 다양한 활용 비교

final 키워드는 메서드 외에도 변수나 클래스에 사용될 수 있습니다. 각각의 위치에 따른 차이점을 표로 정리해 보았습니다.

대상 주요 제약 사항 설계적 의미
변수 (Variable) 초기화 후 값 변경 불가 (상수화) 데이터의 불변성(Immutability) 보장
메서드 (Method) 자식 클래스에서 오버라이딩 불가 핵심 로직 및 동작의 일관성 유지
클래스 (Class) 다른 클래스가 상속(extends) 불가 클래스 확장 자체를 차단 (예: String 클래스)

4. 실무에서의 고려사항: 유연성 vs 안정성

객체지향 설계의 원칙 중 하나인 개방-폐쇄 원칙(OCP, Open-Closed Principle)은 확장에는 열려 있어야 하고 수정에는 닫혀 있어야 함을 강조합니다. 메서드를 final로 선언하는 것은 '확장의 통로'를 하나 닫는 행위와 같습니다. 따라서 무분별한 final 사용은 라이브러리나 프레임워크를 사용하는 후배 개발자들에게 불편함을 줄 수 있습니다. 정말로 변하지 않아야 할 핵심 로직인지 고민한 후 적용하는 것이 시니어 개발자의 덕목이라 할 수 있습니다.


5. 자주 묻는 질문 (FAQ)

Q: private 메서드에 final을 붙일 필요가 있나요?
A: 아니요, private 메서드는 이미 자식 클래스에서 보이지 않으므로 오버라이딩 자체가 불가능합니다. 따라서 private final은 중복된 의미를 갖게 됩니다.

Q: 생성자에 final을 붙일 수 있나요?
A: 생성자는 상속되는 대상이 아니므로 final 키워드를 사용할 수 없습니다.


참고 문헌 및 출처

  • Oracle Java SE Documentation: Writing Final Classes and Methods
  • Bruce Eckel, Thinking in Java, Prentice Hall
  • Kathy Sierra & Bert Bates, Head First Java, O'Reilly Media
728x90