자바 final 키워드 | 자바 입문강좌 32

자바 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

Leave a Comment