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

Java의 final, finally, finalize 차이점 한눈에 정리하기

Java를 학습하다 보면 final, finally, finalize라는 세 가지 키워드를 접하게 됩니다. 이름이 비슷해서 혼동하기 쉽지만, 각각의 역할과 용도는 완전히 다릅니다. 이 글에서는 세 키워드의 차이점을 명확하게 정리해 드립니다.

1. final — 제한을 거는 키워드

final은 키워드(keyword)로, 클래스·메서드·변수에 제약 조건을 부여할 때 사용합니다.

  • 클래스, 메서드, 변수에 제한을 적용하는 키워드입니다.
  • final로 선언된 클래스는 상속될 수 없습니다.
  • final로 선언된 메서드는 하위 클래스에서 오버라이딩(재정의)할 수 없습니다.
  • final 변수는 선언 시점에 반드시 초기화해야 합니다.
  • 한 번 값이 할당되면 이후에는 변경하거나 다시 초기화할 수 없습니다. 즉, 상수처럼 동작합니다.

사용 예시

예를 들어 final int MAX_VALUE = 100;처럼 선언하면 MAX_VALUE는 프로그램 전체에서 100으로 고정됩니다. 또한 final class는 다른 클래스가 상속하지 못하도록 막아줍니다.

2. finally — 예외와 관계없이 실행되는 블록

finally는 블록(block)으로, try-catch 문과 함께 사용되며 예외 처리 로직에서 중요한 코드를 배치하는 용도입니다.

  • try-catch 구문 뒤에 위치하는 코드 블록입니다.
  • 예외가 발생했든 발생하지 않았든, 예외가 처리되었든 처리되지 않았든 항상 실행됩니다.
  • 주로 파일 닫기, 데이터베이스 연결 해제 등 리소스 정리 작업에 활용됩니다.

3. finalize — 객체 소멸 전 정리 작업을 수행하는 메서드

finalize는 메서드(method)로, 객체가 더 이상 필요 없어져 가비지 컬렉터(Garbage Collector)에 의해 회수되기 직전에 호출됩니다.

  • Object 클래스에 정의된 메서드입니다.
  • 객체가 메모리에서 제거되기 직전 마무리 정리(clean-up) 작업을 수행하는 데 사용됩니다.
  • 실행 시점이 보장되지 않으므로, 최신 Java 개발에서는 try-with-resources나 명시적인 close() 메서드 사용이 권장됩니다.

핵심 차이점 요약

구분종류주요 용도
final키워드클래스·메서드·변수에 변경 및 상속 제한 적용
finally블록예외 발생 여부와 무관하게 반드시 실행해야 하는 코드 처리
finalize메서드가비지 컬렉션 직전 객체의 리소스 정리 작업 수행

세 키워드는 철자가 유사하지만, final은 제한, finally는 예외 처리 후 필수 실행, finalize는 객체 소멸 전 정리라는 서로 다른 목적을 가집니다. 이 차이를 정확히 이해하면 Java 코드를 더 안전하고 견고하게 작성할 수 있습니다.