KPlay의 코딩 그리고 잡동사니

자바에서 절대 변하지 않는 특정한 것을 정하고 싶을 때는 최종(Final)을 사용합니다.

이 키워드는 변수, 함수, 클래스에 모두 사용할 수 있으며

변수에 사용할경우 상수, 메소드에 사용할경우 재정의가 불가능한 함수,

클래스에 사용할경우 상속이 불가능한 하나의 완전한 클래스가 됩니다.

"최종적으로 규정하다" 라는 뜻을 가집니다

변수, 함수, 클래스 별로 Final을 붙여서 알아봅시다

먼저 변수에 Final붙이고 나중에 그 변수에 저장된 값을 변경하려고 하면 이렇게

final변수는 변경이 불가능하다고 오류가 나옵니다.

이제 함수의 final에 대해서 알아보겠습니다.

Parent라는 클래스를 하나 정의해주고 Hi라는 문자열을 출력하는 show라는 함수를 정의해줍니다

이후에 Main 클래스로가서 Parent 클래스를 상속받은 뒤

Main main = new Main();으로 main이라는 인스턴스를 선언해주고

main.show()를 실행해주면 Hi라는 문자열이 출력됩니다.

그런데 여기서, Main클래스 내에서 똑같이 show라는 함수를 선언하고

내용을 Hello라는 문자열 출력으로 바꾸면 어떻게 될까요?

오버로딩 되어 상속받은 부모 클래스의 함수를 무시하고 자신의 클래스 내의 show 함수를 실행합니다

따라서 Hello가 출력됩니다.

이렇게 함수가 오버로딩 자기도 모르는 사이에 오버로딩 되면

에러는 나지 않는데 프로그램에 버그가 발생합니다

따라서 함수 이름이 중복되지 않게 하기위해

Parent 클래스의 show함수앞에 final 키워드를 붙여줍니다.

그러면

이런식으로 final 함수가 오버로딩 돼었다고 오류가 뜨며 실행이 안됩니다.

이렇게 final 키워드로 함수의 재정의를 막아줍니다.

마지막으로 클래스의 final을 붙여봅시다

Parent 클래스에 public을 지우고 final키워드를 붙이자

이런식으로 바로 상속오류가 나는것을 볼 수 있습니다.

이렇게 클래스에 final 키워드를 붙이면 그 클래스는 다른 클래스에서 상속받을 수 없게 됩니다.

final은 결국 변수나, 함수, 클래스를 완전하게 보호하기 위해 붙여주는 키워드입니다.

또 eclipse에서는 final 클래스는 이렇게 파란색 삼각형 모양으로

표시해주고 있습니다.

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band