Java에서 final 키워드가 붙으면 어떤 의미를 가지나요?
면접에서 final 키워드에 대해 설명하라는 질문에
상수를 의미한다는 대답을 했다.
제대로 알아보자...
한 번 값이 정해지면 바꿀 수 없도록 하는 규제. "얘는 고정값이에요" 라고 명시한다고 생각해도 된다.
인터페이스가 재정의를 강제하는 것이라면, final은 재정의/재할당을 금지시키는 키워드.
필드, 메서드, 클래스에 각각 적용할 수 있다.
final static pi = 3.14;
변하지 않는 값 = 상수 를 뜻한다.
변하지 않을 값 앞에 final
을 붙여 규제할 수 있음.
사용 빈도 낮음.
상속할 수 없게 한다. 즉 인터페이스의 메서드와 상반되는 용도. 재정의(오버라이딩)할 수 없다.
class A {
final void b() { ... }
}
class B extends A {
void b() { ... } // 오류 발생
}
클래스 앞에 붙이면 이 클래스를 상속할 수 없다.
final class A {
final void b() { ... }
}
class B extends A {
// 오류 발생
}
붙이지 않아도 된다.
메서드를 오버라이딩 금지 시킬 것이라면 선택적으로 붙이면 되는 일로 독립적이다.
그치만 생각해보니 상속이 안되는 클래스의 메서드를 오버라이딩은 시도조차 안되기 때문에 고려할 사항이 아닌듯.
static : 클래스 변수. 인스턴스를 통틀어 하나만 존재하는 변수.
즉 스택 영역을 차지하고 있다.
final: 변하지 않는 값 = 상수
즉, 클래스 전체에서 하나로만 존재하는 상수인 셈이다.
따라서 선언과 동시에 초기화 해주어야 하는 특징을 가진다.
final 키워드가 붙으면 불변성을 가지게 됩니다.
변수, 메서드, 클래스에 붙을 수 있습니다.
변수(필드)에 붙게 되면 상수처럼 쓰이며, 초기화 이후 값을 변경할 수 없습니다.
메서드에 붙게 되면 해당 메서드는 오버라이딩 될 수 없습니다.
클래스에 붙게 되면 상속이 불가능합니다.