
final 키워드란?
자바에서 final 키워드는 변경이 불가능하도록 제한하는 역할을 하며, 변수, 메서드, 클래스에서 각각 다르게 동작합니다. final을 적절히 활용하면 코드의 안정성과 유지보수성을 높일 수 있습니다.
final 키워드의 주요 활용법
final 변수
final 키워드를 변수에 적용하면 값을 한 번만 할당할 수 있으며, 이후 변경이 불가능합니다.
멤버 변수에서 final 사용
class Constants {
final int MAX_VALUE = 100; // 변경 불가능한 상수
void display() {
System.out.println("최대 값: " + MAX_VALUE);
}
}
public class FinalVariableExample {
public static void main(String[] args) {
Constants obj = new Constants();
obj.display();
// obj.MAX_VALUE = 200; // 오류 발생: final 변수는 변경할 수 없음
}
}
주의점: final 멤버 변수는 반드시 선언과 동시에 초기화하거나, 생성자를 통해 초기화해야 합니다.
final 지역 변수
public class FinalLocalVariableExample {
public static void main(String[] args) {
final int num = 10;
System.out.println("숫자: " + num);
// num = 20; // 오류 발생
}
}
주의점: final 지역 변수는 한 번 값을 설정하면 변경할 수 없습니다.
final 참조 변수
class Car {
String model = "Kia";
}
public class FinalReferenceExample {
public static void main(String[] args) {
final Car myCar = new Car();
System.out.println("자동차 모델: " + myCar.model);
myCar.model = "Hyundai"; // 가능 (객체 내부 값 변경 가능)
System.out.println("변경된 모델: " + myCar.model);
// myCar = new Car(); // 오류 발생 (참조 변수 변경 불가능)
}
}
주의점: final 참조 변수는 객체의 참조 자체를 변경할 수 없지만, 객체 내부의 상태는 변경할 수 있습니다.
final 메서드
메서드에 final을 선언하면, 서브클래스에서 해당 메서드를 오버라이딩할 수 없습니다.
class Parent {
final void show() {
System.out.println("부모 클래스의 메서드");
}
}
class Child extends Parent {
// void show() { } // 오류 발생: final 메서드는 오버라이딩할 수 없음
}
public class FinalMethodExample {
public static void main(String[] args) {
Child child = new Child();
child.show();
}
}
주의점: final 메서드를 사용하면 메서드의 동작을 변경할 수 없으므로 설계 단계에서 신중히 결정해야 합니다.
final 클래스
클래스에 final을 선언하면 상속할 수 없습니다. 즉, 해당 클래스는 더 이상 서브클래스를 가질 수 없습니다.
final class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// class Dog extends Animal { } // 오류 발생: final 클래스는 상속할 수 없음
public class FinalClassExample {
public static void main(String[] args) {
Animal animal = new Animal();
animal.sound();
}
}
주의점: final 클래스를 선언하면 재사용성과 확장성이 제한될 수 있으므로, 반드시 필요할 때만 사용해야 합니다.
final 키워드 사용 시 주의점
- final 변수는 한 번 값을 설정하면 변경할 수 없습니다. 단, 참조형 변수의 경우 객체 내부 상태는 변경할 수 있습니다.
- final 메서드는 서브클래스에서 오버라이딩할 수 없어, 기능을 확장할 수 없습니다.
- final 클래스는 상속이 불가능하여, 확장성이 제한될 수 있습니다.
- 성능 향상에는 큰 영향을 주지 않으며, 컴파일러가 최적화를 수행하는 정도에 따라 차이가 있을 수 있습니다.
결론
자바의 final 키워드는 불변성을 유지하고, 코드의 안정성을 높이는 데 유용한 도구입니다. 하지만 무분별한 사용은 코드의 유연성을 떨어뜨릴 수 있으므로, 상황에 맞게 적절히 활용하는 것이 중요합니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
초보 자바 프로그래밍(60) - static 키워드의 활용과 주의점 (0) | 2025.03.26 |
---|---|
초보 자바 프로그래밍(59) - this 키워드와 생성자 체이닝 (0) | 2025.03.24 |
초보 자바 프로그래밍(58) - Thread 동기화 (0) | 2023.10.04 |
초보 자바 프로그래밍(57) - Thread (0) | 2023.10.03 |
초보 자바 프로그래밍(56) - Exception Handling (try-catch-finally, throws) (0) | 2023.10.03 |
댓글