JAVA

[JAVA] final 키워드

EJUN 2023. 4. 23. 02:17

final란?
final키워드는 변수, 메소드, 클래스에 사용이 가능하다.
final키워드가 붙으면 무언가를 제한한다는 의미가 있다.

 

변수에서의 final

변수에 final키워드를 붙이면 값을 수정할 수 없다는 것을 의미한다.

따라서 값을 수정할 수 없기 때문에 변수를 선언하고 반드시 초기화를 해주어야 한다.

변수에 final키워드가 붙은 경우

위의 코드처럼 int형 변수x에 선언과 동시에 값을 2로 초기화를 하였는데 다음 라인에서 x값을 3으로 변경하려고 하면

컴파일러가 final키워드가 붙은 변수라서 값을 변경할 수 없다고 오류를 발생시킨다. 

 

객체변수에 final키워드가 붙은 경우

위의 코드는 객체변수에 final키워드가 붙은 경우이다. 

객체변수는 변수의 값을 가리키는 것이 아니라 주소를 가리키기 때문에 내부 값이 변경되는 건 final키워드가 관여를 하지 못하지만 새로운 객체를 가리키는 것을 막는다. 

pra라는 인스턴스 변수가 생성되어있는데 밑에 줄에 3,4를 인자로 받는 pra변수에 새로운 객체를 할당하려고 하니 컴파일러가 오류를 발생시키는 것을 확인할 수 있다. 


메소드에서의 final

변수에서의 final은 값을 변경하지 못하거나 새로운 객체를 가리키게 하지 못하는 역할로 final키워드가 사용되었다.

 

메소드에서의 final키워드는 final키워드가 붙은 메소드는 다른 클래스에서 오버라이딩을 하지 못하게 

막는 역할을 한다.

Method fianl Keyword

위처럼 Pra클래스의 run메소드에 final키워드를 붙이게 되면

final키워드가 붙은 메소드 오버라이딩 오류 예시

Pra클래스를 상속받은 FinalClass클래스에서 Pra의 run()메소드를 오버라이딩을 하지 못한다.

메소드에 final키워드를 붙이는 이유는 다른 클래스에서 오버라이딩 하는 것을 막기 위해서이다.

<메소드 오버라이딩을 하는 이유 예시>
예를 들어 H사의 자동차가 있다고 하자. H사의 계열사에서 J사의 독자적인 계열사로 분리하였다.
하지만 H사입장에서는 J사에게 공유하고 싶지 않은 정보가 있을 수도 있다.
이런 경우에 H사 입장에서는 해당기능을 하는 메소드에 final키워드를 붙여서 J사에서는 사용하지 못하도록 막기 위한 용도로 final키워드를 사용하였다.

 


클래스에서의 final

클래스에 final키워드를 붙이면 상속이 불가능한 클래스가 된다.

클래스에 final키워드가 붙은 경우

위처럼 Pra클래스에 final키워드가 붙으면 

final클래스를 상속하는 경우

위처럼 Pra클래스를 상속할 수 없게 하는 것이 클래스에 final키워드가 붙은 경우이다.

 

클래스에 final키워드를 붙이는 이유는 나중에 클래스 재정의를 할 때 해당클래스는 제외하고 싶은 경우에 사용한다.

 

'JAVA' 카테고리의 다른 글

[JAVA] 패키지&import & 접근 제어 지시자  (0) 2023.04.26
[JAVA] Object클래스  (0) 2023.04.25
[JAVA] 추상클래스란  (0) 2023.04.23
[JAVA] 상속&super&오버라이딩  (0) 2023.04.12
[JAVA] 메소드(method)란?  (0) 2023.04.04