본문 바로가기

LANG../JAVA

final

final

  •  final 키워드는 변수, 메서드, 클래스 등에 적용할 수 있다.
  •  final 키워드를 사용하면 해당 요소에 대한 변경이 금지되어 불변성을 부여하거나, 상수를 정의하거나, 상속을 제한하는 등의 목적으로 사용된다.
    • final class는 상속이 불가하다.(서브클래스를 가질 수 없다.)
    • final 메서드는 재정의가 불가하다.
    • final 변수는 값의 변경이 불가하다.

1. final 변수

  • final 변수는 한번 값을 할당하면 그 값을 변경할 수 없다. (해당 변수는 상수가 된다.)
  • final 변수는 선언시에 초기화하는 방법과, 생성자를 통하여 초기화하는 방법이 있는데 만약 초기화하지 않고 남겨두면 컴파일 에러가 발생한다.

 

2. final 메서드

  • final 메서드는 자식 클래스에서 부모 클래스의 메서드를 재정의하지 못하게 한다. (오버라이딩 불가능)
  • 클래스에 final이 붙지 않는다면 상속은 가능하고, 자식 클래스에서 final 메서드의 참조는 가능하다.
  • 부모 클래스에서 정의한 method 기능을 자식 클래스가 그대로 쓰게 하고 싶을 때 사용한다.

 

3. final 클래스

  • final을 클래스에 사용하면 해당 클래스는 상속이 불가하다.
  • final 클래스는 자식 클래스를 가질 수 없고, 오직 외부에서 객체 생성을 통해서만 사용할 수 있다.
  • fianl 클래스의 대표적인 예는 String class이다. 상속이 불가하기 때문에 내부의 모든 메서드는 오버라이딩이 불가하다.
  • 주로 라이브러리 클래스나 프레임워크에서 안정성을 유지하기 위해 사용된다.

 

*상수(static final)

  • 자바에서는 불변의 값을 저장하는 필드를 상수(constant)라고 부른다.
  • 상수는 객체마다 저장할 필요가 없는 공용성을 가져야 하며, 여러가지 값으로 초기화될 수 없기 때문에 static과 final 제한자를 동시에 붙여 선언한다.
  • 상수 이름은 모두 대문자로 작성하는 것이 관례이고, 연결된 단어라면 (_)로 단어들을 연결한다.