본문으로 바로가기

final 클래스

class명 앞에 final이 붙은 class로서 상속이 불가능하다. 그렇다면 왜 final class를 사용하는 것일까?

이는 보안상의 이유때문인데, Java에서는 이론상으로는 중요한 class의 sub class를 만들어 sub class로 하여금 시스템을 파괴하도록 할 수 있기 때문에 Java 시스템은 중요한 class에 대해서는 final class로 선언하고 있다. 대표적인 것이 String class이다.

final class로 선언되면 상속받을 수 없기 때문에 당연히 내부의 모든 method는 overridding(재정의)될 수 없다.

 

 

final 메소드

그런데 final class가 아닌 일반 class에서 특정 method만 오버라이딩할 수 없게 할려면 어떻게 해야할까?

method명 앞에 final을 붙이면 된다. 그렇게하면 해당 method는 오버라이딩이 불가능하다. fanal method는 왜 사용할까?

부모 클래스에서 정의한 method 기능을 자식 클래스가 그대로 쓰게하고 싶을떄 사용한다.

예를들어 부모클래스에 speak()라는 메소드가 존재할때 해당메소드는 입으로 말하도록 기능이 정의되어 있다. 그런데 해당클래스를 상속받은 자식클래스가 speak()메소드를 재정의하여 손으로 말하도록 기능을 바꿀 수 있는데, 이러한 것을 원치않을때 사용할 수 있다.

 

 

final 필드

 final 필드는 한번 초기화하면 더이상 그 값을 변경할 수 없도록한다. 즉, 상수가 되버린다. 그래서 상수화를 위해 사용한다. 상수는 모든 클래스에서 공통적으로 사용될 수 있고 여러개 생성하면 오히려 메모리 낭비이기 때문에 static키워드를 붙어 한번만 생성하고 모든 클래스가 공유하도록 한다.

( final static 변수명)

 

상수화가 필요한 경우는 언제일까? 변하는지 않는 값을 다같이 쓰고싶을떄이다. 예를들어 우리가 수학공식에서 자주사용하는 3.14(파이)같은 경우 변수에 저장한 후 변경할 필요가 없는 상수이다. 이러한 상수를 이용하고 싶을떄 static final 필드로 선언하면 편할것 이다.

(final static pie = 3.14;)