반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[JAVA] Final 본문

728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

Final

절대 변하지 않는 특정한 것을 정하고 싶을 때 최종(Final)을 사용합니다. 이 키워드는 변수, 메서드, 클래스에 모두 사용할 수 있습니다. 변수에 사용할 경우 변하지 않는 상수가 되며, 메소드가 사용할 때는 재정의가 불가능한 메소드가 됩니다. 클래스에 사용할 때는 상속이 불가능한 하나의 완전한 메소드가 되는 것입니다.

Stop Value Change

Stop Method Overriding

Stop Inheritance

즉, 자바에서 Final 키워드는 변수의 변형을 막고 메소드의 오버라이딩을 막으며 상속을 막습니다.

 

Final 사용한 변수 다뤄보기

Main클래스에 일반 int 변수를 final 키워드를 사용하여 선언해줍니다. 그러면 내가 입력한 10의 값이 출력되는 것을 볼 수 있습니다.

다시 number = 5; 를 입력하면 number의 값이 final 키워드로 인해 상수로 바뀌었기 때문에 에러가 납니다.
이때는 final로 선언한 코드를 지워주거나 추가하여 입력한 number = 5;를 삭제해주어야 올바르게 실행이 됩니다.

 

Final 사용한 메소드 다뤄보기

<부모클래스>

<Main(자식)클래스>

부모클래스인 Parent클래스를 상속 받는 Main클래스에 main이라는 인스턴스를 생성하여 show()함수를 실행합니다.
그러면 다음과 같이 "Hi"가 출력됩니다. 즉, 부모클래스에서 Hi를 그대로 가져와 출력했기 때문입니다.

그렇다면 Main(자식)클래스에서 show()함수를 재정의하면 어떻게 출력될까요?

바로 Main(자식)클래스에서 같은 이름인 show로 함수를 재정의하여 오버라이딩된 값인 "Hello"가 출력됩니다.

 

<부모클래스>

<Main(자식)클래스>

이번엔 부모클래스의 final을 붙이면 Main(자식)클래스에서 오버라이딩을 하지 못하고 에러가 뜹니다.
final이 클래스를 '다른 내용으로 바꾸는 것(오버라이딩)'을 하지 못하도록 막았기 때문입니다.

 

Final 사용한 클래스 다뤄보기

<부모클래스>

<Main(자식)클래스>

이번엔 부모클래스 public 접근제한자를 final 키워드로 바꿔보겠습니다.
그러면 바로 Main(자식)클래스의 상속된 부분인 Parent에 빨간 밑줄 에러가 뜨는 것을 확인 할 수 있습니다.
final로 정의된 하나의 클래스를 상속 받고자 했기때문에 에러가 납니다. Parent클래스를 지워주면 오류가 사라집니다.
즉, fianl로 정의된 클래스는 더이상 어떠한 클래스에서 상속을 받을 수 없는 하나의 클래스가 됩니다.

 

final 키워드를 사용한 클래스는 이렇게 파일에도 파란세모가 뜨는 파일로 표시가 바뀌어 final클래스임을 나타내주는 것을 확인할 수 있습니다.

 

정리하면, fianl 키워드로 정의된 변수나 메소드, 클래스를 완전히 보호하고, 해당 내용의 값이 바뀌는 것을 보호하기 위해 사용하는 키워드입니다.

728x90
반응형
LIST