Final키워드는 한번 설정한 값은 변경 할 수 없으며, 프로그램이 끝날 때까지 동일한 값을 유지합니다.
final키워드는 무엇이고 사용하면 어떤 장점이 있는가?final키워드는 어떤 경우에 사용되는가?
한번 만 할당되거나 정의된 후 변경될 수 없도록 하는 키워드
- 값을 고정 시킴
- 오버라이딩 또는 상속이 불가능 함
- 메서드 및 클래스의 변경 불가능
- 안정성 향상: 변수 값이 변경되지 않아 예기치 않은 오류 발생 가능성을 줄인다.
- 가독성 및 유지보수성 향상: 변수의 값이 변경되지 않음을 명확히 표시하여 코드 이해를 돕는다.
-
변수
-
final키워드를 사용하여 변수 선언 시, 해당 변수는 상수가 된다.final int MAX_SPEED = 100; // MAX_SPEED = 200; // 컴파일 오류
-
-
메서드
-
메서드에
final키워드를 사용하면, 하위 클래스에서 해당 메서드를 오버라이딩 할 수 없다.class Car { final void startEngine() { System.out.println("엔진 가동"); } } // class ElectricCar extends Car { // // 오류 발생 // final void startEngine() { // System.out.println("전가차 엔진 가동"); // }
-
-
클래스
-
클래스에
final키워드를 사용하면 해당 클래스를 상속할 수 없다.final class Car { final void move() { // 메서드의 내용 } } class ElectricCar extends Car { // 오류 발생 }
-
-
매개변수
-
매개변수에
final을 사용하면, 해당 매개변수의 값을 변경할 수 없다..void modifyCarName(final String newName) { // 컴파일 오류 // newName = Tesla; this.name = newName; }
-
-
참조 형 변수
-
참조형 변수의 참조 값은 변경할 수 없지만, 참조 대상의 멤버 변수는 변경할 수 있다.
public static void main(String[] args) { final ElectricCar tesla = new ElectricCar("ModelS"); //tesla = new ElectricCar("ModelY"); tesla.name = "ModelY"; } class ElectricCar { String name; ElectricCar(String name) { this.name = name; } }
-
변하지 않는 값
static final을 사용하여 선언한다.- 상수명은 대문자를 사용하고 단어는
_로 구분한다. (CONST_VALUE) - 상수들은 애플리케이션 전반에서 사용 되므로 보통
Constant클래스로 관리한다.
- 여러 곳에서 사용되지만, 하나만 만들어 메모리 낭비를 방지할 수 있습니다.
- 상수를 한 클래스에서 관리할 수 있어 유지보수가 용이합니다.
- 변수명만 보고도 의미를 이해할 수 있어 매직 넘버를 피할 수 있습니다.
- 상수를 프로그램 전역에서 재사용할 수 있습니다.
// Constant.java
public class Constant {
static final int MAX_SPEED = 100;
}
// ElectricCar.java
public class ElectricCar {
void speedUp(int acceleration) {
int newSpeed = this.speed + acceleration;
if (newSpeed > Constant.MAX_SPEED) {
return;
}
this.speed = newSpeed;
}
}final키워드는 자바 프로그램의 안정성과 가독성을 높인다.
- 장점:
- 메모리 효율성: 변하지 않는 객체를 활용하여 메모리 낭비를 방지한다.
- 코드 안정성: 예기치 않은 값 변경을 방지하여 오류 발생 가능성을 줄인다.
- 가독성: 코드의 의도를 명확하게 전달한다.
- 주요 용도:
- 상수 선언
- 메서드 오버라이딩 방지
- 클래스 상속 방지