자바 final 키워드
목차
final의 뜻은 ‘최종적인’ 이라는 뜻 입니다. final 은 변수, 메소드, 클래스 앞에 붙일 수 있으며 변수는 상수로, 메소드는 오버라이딩 불가, 클래스는 확장 불가로 성질이 변합니다.
자바 상수
자바 final 키워드를 사용하면 상수를 만들 수 있습니다.
변수 선언시 데이터 타입 앞에 final 키워드를 사용하면 자바의 상수가 됩니다. 상수 선언시 초기화를 해줘야 합니다. 상수는 변수와 달리 변하지 않는 수이기 때문에 초기화 후 값을 대입하려고 하면 컴파일러가 오류를 발생시킵니다.
final int CON_NUMBER = 999;
public static final 상수
public static final 상수는 인스턴스가 필요없는 클래스 상수입니다. 클래스가 메모리에 로드되면 사용할 수 있습니다. 사용법은 (클래스.상수)의 방식으로 사용합니다.
public static final int MAX = 99999;
마찬가지로 선언과 동시에 초기화를 해야합니다. 원주율(PI) 등 주로 하나밖에 없는 숫자를 표현하기 위해 사용하며 JDK 에도 많은 static final 상수가 있습니다.
final 클래스
클래스 앞에 final 을 붙이면 그 클래스는 확장 불가능하게 됩니다. 다시 말하면 상속이 불가능합니다. 프로그램의 안정성을 위해 클래스를 상속하지 못하게 합니다. String 클래스도 final 입니다. String 클래스를 상속하려고 하면 오류가 납니다.
final class NoInheritance{ public void displaySomething(){ System.out.println("Something"); } } // 파이널 클래스는 상속불가 //class NotValid extends NoInheritance{ // public void showInfor(){ // System.out.println("cannot extends from the final class"); // } //}
final 메소드
final 메소드는 오버라이드가 불가능합니다. 더이상 메소드를 변형시킬 수 없습니다.
자바 디자인 패턴인 템플릿 메소드에서도 소개한 바가 있습니다. sub 클래스로 확장하면서 더 이상 메소드 형태를 변형시키지 않도록 합니다.
class finalMethodEx { final public void showInfo(){ System.out.println("final method cannot be overrided"); } } class subClassFinal extends finalMethodEx{ // method is final // public void showInfo(){ // System.out.println("try to override"); // } }
요약
자바 final 키워드에 대하여 알아봤습니다.
절차적 프로그래밍에서의 상수 개념이 객체지향 프로그래밍에서는 좀 더 세분화된 의미를 가지게 됩니다. 처음에는 final 이 낯설지만 사용하면 할 수록 객체 지향 프로그래밍의 깊은 의미를 이해할 수 있습니다.
외부참고문서
final keyword in Java – 자바 final 키워드 javatpoint