brunch

You can make anything
by writing

C.S.Lewis

final 키워드

* 이 내용은 철저히 초심자를 위해 알기 쉽게 설명하는 것을 목적으로 하고 있습니다.

* 더 정확하고 자세한 개념은 다른 고수님들의 글들을 참고하시길 바랍니다.

* 그리고 이 글에서는 코드 최소한으로 다루고 있습니다.


Final의 사전적 의미는 마지막의, 최종적인 이라는 뜻입니다.

이것을 변수의 키워드에 붙인다면 어떤 의미가 될까요?

한번 알아보도록 하겠습니다.


final 키워드는 사전 의미 그대로 최종적인 이라는 뜻을 가지고 있어 한번 지정되면 해당 객체가 종료될 때까지 변경할 수 없습니다.

그래서 클래스 멤버 변수로 선언 시 값을 넣지 않으면 에러가 발생합니다.

뭐라고 하는지 한번 볼까요?

name이라는 필드(변수)가 비어있어 아마도 초기화가 되지 않았다라고 하네요.

즉, 초기 값을 지금 주지 않으면 문제가 된다 라는 뜻입니다.


이때 초기화의 방법은 두 가지입니다.

첫 번째는 변수에 직접 값을 넣는 방법입니다.

하지만 이 방법은 소스에 직접 값을 넣은 후 변경이 불가능합니다.


두 번째 방법은 생성자로 초기화하는 방법입니다.

final 은 영역이 시작되면 종료될 때까지 변하지 않는다고 했죠?

그리고 객체의 시작은 생성자로부터 이기 때문에, 이점을 이용하면 생성자를 이용해 final 변수에 값을 넣을 수 있게 됩니다.

그래서 초기 값 “멍멍이” 를 객체화 시 이름을 넣어주지 않으면 그대로 “멍멍이” 가 name의 값이 되겠지만, 객체화 시 이름을 넣어준다면 그 넣어준 이름의 값이 name에 들어가게 되겠죠?

앞에서 배운 생성자 오버로드를 활용하여 객체화 시 이름을 줄수도 있고, 주지 않을 수도 있는 다양성을 부여해 줬네요.


어쨌든 우리는 final 키워드가 붙은 변수는 생성자를 통해 초기값을 변경할 수 있다는 것을 배웠습니다.

하지만 여기에 static 이 붙는다면 어떻게 될까요?

Static 이 붙은 멤버는 클래스 원본 영역에 있기 때문에 일반 멤버와는 다르다고 했습니다.

그래서 생성자를 통해서 소통도 불가능하다고 했었고요.


그런 이유로 static과 final 이 붙으면 아예 초기값을 준 상태에서 변경할 수 없고, 그래서 우리는 이 static final 키워드가 붙은 변수의 값을 불변의 값, 상수(constant)라고 부릅니다.


소스상에 지정되면 프로그램상에서는 절대로 바꿀 수 있는 방법이 없기에, 이 특수한 친구는 뭔가 다르다는 것을 남들에게도 알려주기 위해 모두 대문자로 표기해 줍니다.


이 final이라는 녀석은 앞으로 우리가 자바의 개념을 배워 나갈 때 자주 등장하는 키워드는 아닙니다.

하지만 이 정도는 기억해 둡시다.

한번 설정되면 생성자를 통해서만 바꿀 수 있다.

Static까지 붙으면 객체화가 불가능하기에 바꿀 수 있는 방법이 없다.

그래서 static final 은 불변의 값, 상수(constant)라고 부른다.

매거진의 이전글 정적(static) 멤버
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari