final 클래스, final 메소드, final 필드를 사용하는 이유

이진호·2022년 8월 30일
0

JAVA

목록 보기
2/10
post-thumbnail

final 클래스

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {
    ....
}
  • class명 앞에 final이 붙은 class로 상속이 불가능하다는 특징을 가집니다.
  • 주로 보안상의 이유로 사용되는데 중요한 class의 자식 class를 생성해서 해당 class를 통해 시스템을 파괴할 수 있기 때문에 이를 방지하기 위해서 사용됩니다.
  • 대표적인 예로 String 클래스가 존재합니다.
  • class 상속이 불가능하므로 내부의 모든 method들도 overriding이 불가능합니다.

final 메소드

class ParentClass {
	final void finalMethod() { }
}

class childClass extends ParentClass {
	void finalMethod() { } // 컴파일 에러(오버라이딩 불가능)
}
  • method명 앞에 final이 붙은 method로 일반 클래스 상속시 해당 method는 오버라이딩이 불가능하다는 특징을 가집니다.
  • 주로 부모 클래스에서 정의한 method 기능을 자식 클래스가 그대로 쓰도록 하기 위해 사용됩니다.

final 필드

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {
               
    private final byte[] value;
    ....
    
    private static final char REPL = '\ufffd';
    ...
}
  • 필드 앞에 final 붙인 형태로 한번 초기화하면 더이상 그 값을 수정할 수 없게 합니다.
  • final 필드에 초기값을 줄 수 있는 방법은 단 2가지입니다.
    • 필드 선언 시 초기값 설정.
    • 생성자에서 초기값 설정.
  • 초기화가 되지 않은 final 필드가 남아있다면 컴파일 에러가 발생합니다.
  • 인스턴스 전역에서 값을 수정할 필요가 없는 동일한 데이터를 가져야 하는 경우 사용되며, static과 함께 써서 상수를 선언하기 위해서도 사용됩니다.

출처

0개의 댓글