IT's 우

[java] final vs finally vs finalize 본문

CS/Java

[java] final vs finally vs finalize

디우 2023. 6. 30. 15:57
728x90

final 키워드 → 변경 ❌

  • 변수, 메서드 클래스가 변경 불가능 하도록 만든다.
  • 기본 타입 변수에 적용 시
    • 해당 변수의 값 변경 ❌
  • 참조 변수에 적용 시
    • 참조 변수가 힙 내의 다른 객체를 가리키도록 변경할 수 ❌
  • 메서드에 적용 시
    • 해당 메서드를 오버라이드 할 수 없다.(오버로딩은 가능)

 

 💯 오버로딩(Overloading)
자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.

- 오버로딩의 조건
메서드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 **‘리턴 값’**만 다른 것은 오버로딩을 할 수 없다는 것이다.

오버라이딩(Overriding)
부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것

- 오버라이딩 조건
오버라이딩은 부모 클래스의 메서드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메서드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.

 

 


finally 키워드 → try-catch 문에서 사용

try {

	//예외가 없다면 수행해야 할 일

} catch {
	// exception 처리
}
finally {
	// 예외가 있든 없든 항상 수행해야 할 일
}
  • try catch 블록 뒤에서 항상 실행될 코드 블록을 정의하기 위해 사용한다.
  • try에 return이 있더라도 finally가 수행된 후 return 된다.

 


finalize 메서드

  • 가비지 컬렉터가 더 이상의 참조가 존재하지 않는 객체를 메모리에서 삭제하겠다고 결정하는 순간 호출된다.
  • 즉 더 이상 사용되지 않는 객체가 있을 때 메모리 낭비를 막기 위해서 GC가 이 객체를 없애 버리는데 이때 해당객체의 finalize()를 호출해서 없앤다.
  • finalize()는 java.lan.Object 클래스로부터 상속받아 모든 클래스의 객체가 가지고 있는 메서드.
    • 즉, 만약 객체가 삭제되기 직전에 실행되어야 하는 로직 같은 게 있다면 Object 클래스에 정의된 finalize() 메서드를 오버라이딩하여 정의할 수 있다.
  • (권장 ❌) finalize()는 언제 호출될지 알 수 없기 때문에, finalize()를 오버라이딩 했다고 해서 여기에 의존하는 방식의 코딩은 좋은 방법은 아닐 수 있다.

참고

https://github.com/backtony/Backend_Interview_for_Beginner/blob/master/Java.md

https://wjheo.tistory.com/entry/final-finally-finalize-차이점

728x90
반응형

'CS > Java' 카테고리의 다른 글

[java] 리플렉션(Reflection)  (0) 2023.07.14
[java] 추상 클래스와 인터페이스 차이  (0) 2023.07.14
[Java] == 와 equals 차이  (1) 2023.06.15
[Java] String vs Char 차이  (1) 2023.06.15
[Java] Object 클래스  (0) 2023.06.01