티스토리 뷰

language/JAVA

final 키워드

북항 2019. 10. 12. 01:39
donaricano-btn
반응형

하반기 공채 시즌입니다. 올해 하반기 신입 공채를 노리고 있는 저 역시 자소설을 수십페이지는 쓰고 있는 것 같습니다. 며칠 전 하반기 공채 시즌 중에는 처음으로 면접을 보게 되었는데 제대로 답변을 못한 부분이 있어서 기록해두고자 합니다. 아마 면접에서 떨어지게 된다면 이 질문 때문이 아닐까 싶습니다. 질문을 하신 면접관께서는 이 질문에 제대로 답변을 못 한 이후로 단 한 마디도 하지 않으셨기 때문입니다. (슬픔) 지금 제대로 공부를 해 두고 다른 곳에서 질문을 받게 되면 반드시 제대로 답변을 하도록 해야겠습니다.

 

질문은 final 키워드에 관한 것이었습니다. final 키워드가 무엇이냐는 질문에 저는 제가 아는대로 '단 한번만 값이 할당되는 변수에 사용하는 키워드'라고 대답했습니다. 다시말해 변하지 않는 값이라고 대답한 것이죠. 그런데 면접관 께서는 'final 키워드는 세가지 용도로 사용하는데 아는대로 대답해 주세요.' 라고 질문하셨고 저는 멘붕에 빠지고 말았습니다. 제가 아는 final 키워드의 유일한 역할은 상수를 사용할 때 밖에 없었기 때문입니다. 

 

집에와서 허겁지겁 검색을 해 보니 아니나 다를까 제가 몰랐던 사용법들이 존재하고 있었습니다. 먼저 final 이 무엇을 뜻하는지 무엇을 의미하는지부터 알아보도록 하겠습니다.

 

final


위키 백과에 final을 검색해 보니(링크) 다음과 같은 문장을 볼 수 있었습니다.

 

the final keyword is used in several contexts to define an entity that can only be assigned once.

 

즉, 엔터티를 단 한번만 할당하도록 만드는 키워드라는 것인데 실제로 final 키워드를 사용해서 변수를 선언한 뒤 다른 값을 할당하려고 하면 컴파일 오류가 생기는 것을 확인할 수 있습니다. 그러니까 저는 첫번째 질문은 제대로 답변을 한 것입니다. 그렇다면 final 키워드를 사용할 수 있는 세 가지 용도는 무엇일까요? 그 중 하나는 제가 대답했던 변수이고 나머지는 메소드와 클래스입니다.

 

 

사실 정답을 확인한 이후에는 상당히 허탈한 심정이 되었습니다. 어떻게 보면 당연한 용도입니다. 면접관께서는 정말 친절하게 저에게 세가지 용도라고 까지 말씀해 주셨는데 저는 대답을 못 한 것입니다. 이 세가지 용도에 대해서 각각 살펴 보도록 하겠습니다.

 

final class


클래스를 선언할때 final 키워드를 사용하게 되면 그 클래스는 상속을 할 수 없게 됩니다. 코드를 통해 설명해 보도록 하겠습니다.

 

final class MyFinalClass {

	...

}

class NewClass extends MyFinalClass // 컴파일 에러가 발생한다

 

위 코드에서 NewClass는 MyFinalClass를 상속할 수 없습니다. 이유는 MyFinalClass 가 final로 선언되어있기 때문입니다. 이제 MyFinalClass를 상속받은 클래스가 없기 때문에 MyFinalClass가 가리키는 인스턴스는 무조건 MyFinalClass 의 변수값과 메소드를 가지고 있을 것입니다. 

 

일관성 있는 클래스가 필요할 때 이 final 키워드를 사용할 수 있을 것입니다.

 

final method


메소드의 경우도 마찬가지입니다. 다만 이 때는 상속받은 클래스에서 이 메소드를 오버라이드 하지 못한다는 것입니다. 즉 상속받은 클래스에서는 상위 클래스에서 선언된 메소드만을 호출할 수 있습니다.

 

역시 일관성 있는 메소드 호출이 필요한 경우 사용할 수 있을 것입니다. 당연하겠지만 추상메소드에서는 이 final 키워드를 사용할 수 없고 추상메소드만으로 이뤄진 인터페이스에서는 역시 당연하게도 final 메소드를 사용할 수 없습니다. 사실 실무에서는 인터페이스를 이용한 상속이 대부분이므로 제가 final method를 모르고 있었던 것도 무리는 아닌 것 같습니다.

 

final variable


실무에서 가장 많이 접하는 것은 final 변수입니다. 할당된 값이 불변하다는 것을 보장하며 역시 변수의 값에 일관성이 필요할 때 사용하게 되는데, 제일 많이 볼 수 있는 것이 상수값을 할당할 때 입니다.

 

면접을 볼 때 마다 모르는 것이 얼마나 많은지 또 배울 것이 얼마나 많은지를 깨닫게 되는 것 같습니다. 실제로 이직할 생각이 없다고 하더라도 주기적으로 면접을 보고 스스로의 지식을 테스트 해 보는 것도 좋지 않을까 하는 생각이 듭니다. 어쨌거나 다음 면접은 대비를 더 잘 해야 겠습니다.

반응형
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함