SeouliteLab
Java에서 final, finally, finalize의 차이점과 활용법 본문
소개:
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는 객체가 소멸되기 직전에 호출되어 객체의 정리 작업을 수행합니다. 이러한 세 가지 키워드를 올바르게 이해하고 활용하면 자바 프로그래밍에서 코드의 안정성과 유지보수성을 향상시킬 수 있습니다.