위 세가지 단어들은 서로 다르게 사용되는 단어이지만 복습 차원에서 한번 짚고 넘어가려고 합니다.
Final
final은 '마지막', '변경 될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 적용 될 수 있습니다.
변수에 사용하면 값을 변경 할 수 없는 상수가 되고, 메서드에 사용하면 오버라이딩을 할 수 없고,
클래스에 사용하면 자손 클래스를 정의 할 수 없습니다.
final class Unique{ // 조상이 될 수 없는 클래스
final int countRatio = 0.25; // 변경 불가능한 멤버 변수
final int getDiscount(int price){ // 오버라이딩 할 수 없는 메서드
int defaultRatio = 0.1; // 변경 불가능한 지역 변수
...
}
}
보통 Java를 사용해 개발을 하다보면 생성자에서 많이 사용하는 것을 확인 할 수 있습니다.
class StudentController{
private final StudentService studentService;
public StudentController(StudentServiceImpl studentServiceImpl){
this.studentService = studentServiceImpl
}
}
클래스 내에서 매개 변수를 갖는 생성자을 선언 해 인스턴스를 생성할 때
final이 붙은 멤버 변수를 초기화하는데 필요한 값을 생성자의 매개변수로부터 제공받는 방식입니다.
이러한 방식을 사용하면 클래스에 선언된 final 이 붙은 멤버 변수가 다른 값을 갖도록 하는 것이 가능합니다.
Finally
finally의 경우 예외 발생 여부와 상관없이 실행되어야 하는 코드를 포함시킬 목적으로 사용됩니다.
try-catch문에서 사용됩니다.
예외가 발생하지 않는 경우는 try - finally 구문이 실행되며,
예외가 발생하는 경우에는 try - catch - finally 구문이 실행됩니다.
@Slf4j
class DoLog{
private final StudentService studentService;
try{
studentService.join();
} catch (Exception e){
log.info("예외 발생!!", e)
} finally{
... /* 마지막으로 실행 시킬 로직들 추가 */
log.info("로직 종료")
}
}
Finalize
Object에 있는 메서드로써, 가비지 콜렉터(GC)가 객체에 대한 참조가 더이상 없다고 판단 될 때 GC에 의해 호출되는 메서드입니다.
하지만 finallization 메커니즘은 성능 문제, 교착 상태 및 정지로 이어질 수 있는 본질적인 문제가 있습니다.
이 외에도 리소스 누수 가능성, 순서 지정 불가 등등 많은 문제가 존재합니다.
이에 따라서 Java9 부터는 Deperecated 되었습니다.
'Java' 카테고리의 다른 글
Javadoc 이란? (0) | 2023.04.22 |
---|---|
Java EE 와 Java SE 뭐가 다른가요? (0) | 2023.04.21 |
==와 equals()는 어떠한 차이점을 가질까? (0) | 2023.04.21 |
좋은 객체 지향 설계의 5가지 원칙 (0) | 2023.04.05 |
다형성 (Polymorphism) (0) | 2023.04.05 |