[ 자바의 신 ] final은 왜 쓰는걸까?

Do_It·2023년 12월 20일

final이 궁금한 이유

프로젝트를 만들면서 final을 참 많이 봤다. 근데 정작 왜 쓰는지를 몰랐다. 그 때는 하나 하나 살펴 볼 여력(?) 또는 뒷받침 지식이 부족했다. 솔직히 "기능만 되면 되는거지~!"하고 final을 쓰는 의미조차 모른채 프로젝트를 진행했었다.
프로젝트를 통해 어떻게 웹 서버 애플리케이션이 작동하는지 큰 흐름을 배웠으니 이제는 프로젝트를 하면서 궁금했던 것들을 하나씩 세심히 파헤쳐보고 공부하고 있는 중이다. 궁금했던 것 중 하나가 바로 final !!

final은 대체 왜 쓰는걸까?

final의 의미부터

final은 누구나 알듯이 마지막이라는 뜻이다.
왜 마지막이여야할까?
이제 하나씩 공부해보자. 클래스,메소드,변수별로 공부해보자

클래스에서 final을 선언하는 이유

클래스가 final로 선언되어 있으면 상속을 해 줄 수 없다.
더 이상 확장해서는 안 되는 클래스, 누군가 이 클래스르 상속 받아서 내용을 변경해서는 안 되는 클래스를 선언할 때, final로 선언한다.

메소드를 final로 선언하는 이유

final로 선언하여 Overriding 할 수 없게 만들기 위해서이다.

변수에서 final을 쓰는 것은 좀 다르다!

변수에 final 선언하면 더 이상 바꿀 수 없다는 것이다.

public class FinalVariable {
    final int instanceVariable;
}

이렇게하면 될까?

public class FinalVariable {
    final int instanceVariable =1 ;
    
    }

이렇게 해야지 된다. 왜 그럴까? 변수 생성과 동시에 초기화를 해야만 에러가 발생하지 않는다. 왜냐하면 여러 객체 생성 후 각각 초기화하는 경우 final 변수의 본 의미를 잃기 때문이다.

그러나 매개 변수나 지역 변수 선언할 때 반드시 초기화할 필요는 없다. 왜냐하면 매개 변수는 이미 초기화 된 값이고, 지역 변수는 메소드 내에서만 쓰이는 것이기에 다른 곳에서 변경할 일이 없기 때문이다.

클래스는 final이고 그 안의 변수는 final이 아니라면?

클래스가 final이라면 그 클래스의 객체는 한 클래스 내에서 두 번 이상 생성할 수 없다. 그러나 final 클래스로부터 생성된 객체 안의 변수는 final이 아니기에 다른 값으로 변경 할 수 있다.

결론

final은 말 그대로 마지막이라는 의미이다. 즉, 변경해서는 안되는 부분에 사용해야 되는 것이다. 좀 더 세부적으로는 final을 클래스에 쓰는 것과 메소드에 쓰는 것과 변수에 쓰는 것들을 각각 다른 의미가 있음을 공부할 수 있었다.

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글