[Java] 마침내 정확히 알아보는.. final

민지·2023년 12월 18일
0

Java

목록 보기
4/9
post-thumbnail

오늘의 질문

Java에서 final 키워드가 붙으면 어떤 의미를 가지나요?

면접에서 final 키워드에 대해 설명하라는 질문에
상수를 의미한다는 대답을 했다.

제대로 알아보자...

final

한 번 값이 정해지면 바꿀 수 없도록 하는 규제. "얘는 고정값이에요" 라고 명시한다고 생각해도 된다.
인터페이스가 재정의를 강제하는 것이라면, final은 재정의/재할당을 금지시키는 키워드.

종류

필드, 메서드, 클래스에 각각 적용할 수 있다.

final 필드

final static pi = 3.14;
변하지 않는 값 = 상수 를 뜻한다.
변하지 않을 값 앞에 final을 붙여 규제할 수 있음.

final 메서드: 재정의(오버라이딩) 불가

사용 빈도 낮음.
상속할 수 없게 한다. 즉 인터페이스의 메서드와 상반되는 용도. 재정의(오버라이딩)할 수 없다.

class A {
	final void b() { ... }
}

class B extends A {
	void b() { ... }		// 오류 발생
}

final 클래스: 상속 불가

클래스 앞에 붙이면 이 클래스를 상속할 수 없다.

final class A {
	final void b() { ... }
}

class B extends A {
	// 오류 발생
}

궁금증 1: final 클래스 안의 메서드는 final 이 붙어야 하는가?

붙이지 않아도 된다.
메서드를 오버라이딩 금지 시킬 것이라면 선택적으로 붙이면 되는 일로 독립적이다.

그치만 생각해보니 상속이 안되는 클래스의 메서드를 오버라이딩은 시도조차 안되기 때문에 고려할 사항이 아닌듯.

궁금증 2: static final

static : 클래스 변수. 인스턴스를 통틀어 하나만 존재하는 변수.
즉 스택 영역을 차지하고 있다.

final: 변하지 않는 값 = 상수

즉, 클래스 전체에서 하나로만 존재하는 상수인 셈이다.
따라서 선언과 동시에 초기화 해주어야 하는 특징을 가진다.

오늘의 대답

final 키워드가 붙으면 불변성을 가지게 됩니다.
변수, 메서드, 클래스에 붙을 수 있습니다.
변수(필드)에 붙게 되면 상수처럼 쓰이며, 초기화 이후 값을 변경할 수 없습니다.
메서드에 붙게 되면 해당 메서드는 오버라이딩 될 수 없습니다.
클래스에 붙게 되면 상속이 불가능합니다.

profile
개발의, 개발에 의한, 개발을 위한 기록장

0개의 댓글

관련 채용 정보