본문 바로가기

카테고리 없음

[JAVA]final 에 관하여

final 은 최종 상태를 의미하며 수정할 수 없다.

 

final은 클래스, 메소드, 필드에서 사용이 가능하다.

1. final 클래스와 메소드

상속도 마찬가지로 final 키워드가 들어간 클래스의 경우 최종의 클래스가 되므로 상속이 불가능 하다.

그래서 부모클래스가 될 수 없으므로 자식 클래스를 만들 수 없다.

 

또한 오버라이딩도 불가능 하다.

 

 

2. final 필드

final 필드의 초기값을 줄 수 있는 방법 

  • 필드 선언시
  • 생성자

필드 선언시에 줄 경우엔 간단히 final을 지정해줘야할 필드가 있을 경우이다.

 

생성자가 필요할 경우라면 복잡한 초기화 코드가 필요하거나 객체 생성시에 외부 데이터로 초기화 해햐 하는경우이다.

생성자로 줄 경우엔 초기화를 끝내지 않으면 컴파일 에러가 발생한다.

public final class 클래스명 {...}

 

 

3. static final (상수)

잘 알고 있는 상수는 java 에선 static final 키워드로 선언한다.

 

사실 헷갈리는게 static이 붙지 않은 final도 상수라고 해야하지 않을까 싶었는데

 

아무것도 붙지 않은 final 필드는 객체마다 저장되고, 생성자의 매개를 통해 여러 값을 가질수 있기 때문에 상수가 될수 없다고 한다.

반면에 static final 필드는 객체마다 저장하지 않고 클래스에만 포함된다고 한다.

 

static final 타입 필드명 = 고정된 값;