:: ADVANCE ::

[Java] final 본문

language/Java

[Java] final

KSJ14 2015. 8. 29. 18:04
반응형

[Java] final


final의 의미는 최종적이라는 뜻을 가지고 있다. 그렇다면 final 필드는 최종적인 필드라는 뜻인데, 무슨 뜻일까?


final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다는 것이다.



final 필드는 다음과 같이 선언한다.


final 타입 필드 [= 초기값];



final 필드의 초기값을 줄 수 있는 방법은 딱 두가지 밖에 없다.

번째는 필드 선언 시에 주는 방법이고,

두번째는 생성자에서 주는 방법이다.


단순 값이라면 필드 선언 시에 주는 것이 제일 간단하다. 하지만 복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부 데이터로 초기화해야 한다면 생성자에서 초기값을 지정해야 한다. 생성자는 final 필드의 최종 초기화를 마쳐야 하는데, 만약 초기화 되지 않은 final 필드를 그대로 남겨두면 컴파일 에러가 난다.



불변의 값을 상수라고 한다. constant. final도 한 번 초기화되면 수정할 수 없는 필드라고 하었다.

그렇다면 final 필드를 상수라고 할 수 있지 않은가?


하지만 final 필드를 상수라고 부르지는 않는다. 불변의 값은 객체마다 저장할 필요가 없는 공용성을 띠고 있으며, 여러 가지 값으로 초기화될 수 없기 때문이다. 


final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러 가지 값을 가질 수 있기 때문에 상수가 될 수 없다.


상수는 static 하면서 final 해야 한다.


static final 필드는 객체마다 저장되지 않고, 클래스에만 포함된다.



static final 타입 상수 [= 초기값];


또는 

static final 타입 상수;

static {

상수 = 초기값;    

}


으로 초기화할 수 있다.


상수 이름은 모두 대문자로 작성하는 것이 관례이다. 



final 키워드는 클래스, 필드, 메소드 선언 시에 사용할 수 있다. final 키워드는 해당 선언이 최종 상태이고, 결코 수정될 수 없음을 뜻한다. final 키워드가 클래스, 필드, 메소드 선언에 사용될 경우 해석이 조금씩 달라진다. 클래스와 메소드 선언 시에 final 키워드가 지정되면 상속과 관련이 있다.



final class -> 상속할 수 없는 클래스


final class 는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다. 즉, final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다. 


public final class 클래스 { ... }


자바 표준 API에서 제공하는 String 클래스가 대표적인 final class 의 예이다.



final method -> 오버라이딩 할 수 없는 메소드


final method 는 최종적인 메소드이므로 오버라이딩 할 수 없는 메소드가 된다. 즉, 부모 클래스를 상속해서 자식 클래스를 선언할 때 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의 될 수 없다는 것이다. 


public final 리턴타입 메소드 ( [ 매개변수, ... ] )  { ... }

반응형

'language > Java' 카테고리의 다른 글

[Java] extends와 implements  (0) 2015.08.31
[JAR] JAR파일  (0) 2015.08.24
[Java] 예외 처리  (0) 2015.03.19
Comments