Java로 개발을 하다보면 final
키워드를 자주 만나게 된다.
그럴 때마다 나는 이런 생각을 한다. '어이 javac, 이 녀석은 여기서 끝이다 쿡쿡'
여기서 알 수 있는 것은 나는 final에 대해서 어중간하게 알고 있다는 것이다.
그래~서! 이번 글에서는 final 키워드에 대해서 세세하게 알아보는 시간을 가져보겠다. 😎
역시 뭔가를 공부할 때는 '사전적 의미'를 빼놓을 수 없다.
위키피디아에 정리된 final이란 다음과 같다.
final
은 여러 context에서 사용되는데, 오직 한번만 할당될 수 있는 context에 사용한다.
즉, final이 붙은 context(변수, 함수, 클래스)의 값은 변할 수 없는 것이다.
자, 그렇다면 실제 예시들을 살펴보자.
먼저 아래와 같이 final이 붙은 변수와 붙지 않은 변수가 있다고 가정해보자.
public class DemoApplication {
String name = "kai";
final String finalName = "kai";
}
각 변수를 다른 값으로 수정하려고 하면, 이렇게 final이 붙은 변수에서는 에러가 나는 것을 확인할 수 있다.
즉, final이 붙은 변수는 초기화를 해준 이후에는 다시 수정할 수 없다.
함수 또한 변수와 마찬가지로 final 키워드가 붙으면 재정의 할 수 없게 된다.
다음 예시를 보면, Prarent에서 final로 선언된 func2 메서드를 Child에서 상속받아 다시 정의하려고 하는 상황이다.
이 때, 재정의할 수 없다는 에러가 보여지고 있다.
final이 클래스에 붙어면 변수, 함수와 마찬가지로 재정의할 수 없게 된다.
클래스를 재정의하는 것은 다른 클래스를 상속받아서 뭔가를 하는 경우이고, 아래와 같이 final이 붙은 클래스를 상속받으려 하자 에러가 출력되는 것을 확인할 수 있다.
이번 글에서는 fianl에 대해서 알아봤다. final에 대해서 간단히 정리하면 이럴 것이다.
final 키워드는 해당 context를 재정의하지 못하도록 제한한다.