SeouliteLab

Java에서 final, finally, finalize의 차이점과 활용법 본문

카테고리 없음

Java에서 final, finally, finalize의 차이점과 활용법

Seoulite Lab 2024. 3. 26. 13:33

소개:
Java 프로그래밍에서 final, finally, finalize는 비슷한 이름을 가졌지만 각각 다른 용도로 사용됩니다. 이번 포스트에서는 이 세 가지 개념의 차이를 설명하고 예제를 통해 각각의 활용법을 살펴보겠습니다.

final:
final은 변수, 메서드 또는 클래스에 사용되어 해당 요소가 변경될 수 없음을 나타냅니다. 변수에 사용될 경우 값을 한 번만 할당할 수 있고, 메서드에 사용될 경우 하위 클래스에서 오버라이드할 수 없으며, 클래스에 사용될 경우 상속을 허용하지 않습니다.

예제 1: final 변수와 메서드

public class FinalExample {
    final int x = 10; // final 변수
    final void display() { // final 메서드
        System.out.println("This is a final method.");
    }
}

class SubClass extends FinalExample {
    // 아래 주석을 제거하면 컴파일 오류가 발생함
    // void display() { } 
}

출력 결과: 해당 없음

finally:
finally 블록은 try-catch 블록과 함께 사용되며, 예외 발생 여부와 상관없이 항상 실행되는 코드를 포함합니다. 주로 리소스를 해제하거나 정리하는 작업에 사용됩니다.

예제 2: finally 블록

public class FinallyExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // 예외 발생
            System.out.println(result);
        } catch (ArithmeticException e) {
            System.out.println("ArithmeticException occurred.");
        } finally {
            System.out.println("Finally block always executes.");
        }
    }
}

출력 결과: ArithmeticException occurred. Finally block always executes.

finalize:
finalize 메서드는 객체가 가비지 컬렉터에 의해 소멸되기 직전에 호출됩니다. 객체의 리소스를 해제하거나 정리하는 작업에 사용됩니다. 그러나 finalize 메서드의 사용은 권장되지 않으며, 명시적인 리소스 관리 방법을 선호해야 합니다.

예제 3: finalize 메서드

public class FinalizeExample {
    public void finalize() {
        System.out.println("Finalize method is called.");
    }

    public static void main(String[] args) {
        FinalizeExample obj = new FinalizeExample();
        obj = null; // 객체에 대한 참조 제거
        System.gc(); // 가비지 컬렉터 실행 요청
    }
}

출력 결과: Finalize method is called.

설명:
final은 변수, 메서드 또는 클래스에 사용되어 변경이 불가능함을 나타내며, finally는 try-catch 블록과 함께 사용되어 항상 실행되는 코드를 정의합니다. finalize는 객체가 소멸되기 직전에 호출되어 객체의 정리 작업을 수행합니다. 이러한 세 가지 키워드를 올바르게 이해하고 활용하면 자바 프로그래밍에서 코드의 안정성과 유지보수성을 향상시킬 수 있습니다.