반응형
자바를 공부하거나 개발하다 보면 final, finally, finalize라는 비슷한 이름의 키워드나 메서드를 자주 접하게 된다. 이름은 비슷하지만 쓰임새나 의미는 전혀 다르기 때문에 혼동하기 쉽다. 이 문서에서는 세 가지의 개념을 명확히 구분하고 각각의 역할을 알아보자.
1. final
final은 자바에서 수정 불가능성을 의미하는 키워드다. 다양한 위치에 사용할 수 있으며 의미는 맥락에 따라 조금씩 달라진다.
1.1 변수에 사용
- 변수에 final을 선언하면 초기화 이후 값 변경이 불가능하다.
- 주로 상수 선언 시 사용된다.
final int MAX_COUNT = 100;
1.2 메서드에 사용
- 메서드에 final을 선언하면 서브 클래스에서 오버라이딩할 수 없다.
public final void printHello() {
System.out.println("Hello");
}
1.3 클래스에 사용
- 클래스에 final을 붙이면 상속이 불가능하다.
public final class Utility {
// 상속 불가
}
2. finally
finally는 예외 처리 구조(try-catch)에서 반드시 실행되어야 하는 코드 블록을 정의할 때 사용된다.
- 예외가 발생하든 안 하든 finally 블록은 항상 실행된다.
- 주로 리소스 해제, 정리 작업에 활용된다.
try {
// 예외 발생 가능성 있는 코드
} catch (Exception e) {
// 예외 처리
} finally {
// 반드시 실행되는 블록 (파일 닫기, DB 연결 종료 등)
}
3. finalize
finalize()는 자바의 Object 클래스에 정의된 객체 소멸 직전에 호출되는 메서드다.
- GC(Garbage Collector)가 객체를 회수하기 전에 호출된다.
- 명시적으로 호출하지 않으며, 재정의하여 사용한다.
- 현재는 거의 사용되지 않으며, Java 9부터는 Deprecated 처리되었다.
@Override
protected void finalize() throws Throwable {
try {
System.out.println("객체가 소멸됩니다");
} finally {
super.finalize();
}
}
4. 세 키워드 요약 비교
키워드 | 유형 | 주요 목적 | 사용 위치 |
final | 키워드 | 변경 불가능하게 만들기 | 변수, 메서드, 클래스 |
finally | 키워드 | 예외 처리 블록에서 항상 실행 | try-catch-finally 구문 |
finalize | 메서드 | 객체 소멸 전 처리 (Deprecated) | 클래스 내부 |
final, finally, finalize는 이름이 비슷하지만 의미와 목적이 완전히 다른 요소들이다. final은 변경 방지, finally는 예외 처리 후 정리 작업, finalize는 소멸 직전 처리로 구분되며, 특히 finalize는 이제 거의 사용되지 않으므로 대체 방법 (예: AutoCloseable)을 고려해야 한다.
실무에서 자주 쓰이는 final과 finally는 명확한 이해가 필수이며, 코드 안정성과 자원 관리에 직접적인 영향을 미친다.
반응형
'Programming > Java' 카테고리의 다른 글
JAVA 데드락(Deadlock)과 이를 방지하는 방법 (교착상태) (0) | 2025.04.15 |
---|---|
JAVA synchronized 키워드와 ReentrantLock의 차이점 (멀티스레딩) (0) | 2025.04.15 |
JAVA 불변 객체(Immutable Object)란 무엇이며, 어떻게 만들 수 있을까 (0) | 2025.04.15 |
JAVA equals()와 hashCode() 오버라이딩할 때 주의할 점 (1) | 2025.04.10 |
JAVA ArrayList vs LinkedList 차이점과 선택 기준 (0) | 2025.04.10 |