자바에서 final은 변수, 메소드, 클래스 등에 적용되어 특정한 의미와 제약을 부여합니다. final로 선언된 요소는 더 이상 변경할 수 없으며, 여러 컨텍스트에서 사용됩니다.
자바에서의 final 키워드는 변수, 메소드, 또는 클래스에 적용될 수 있는 한정자로, 해당 요소에 대한 변경을 허용하지 않음을 나타냅니다.
final int MAX_VALUE = 100;
Javapublic class Parent {
final void printMessage() {
System.out.println("This is a final method.");
}
}
public class Child extends Parent {
// 아래의 코드는 오류를 발생시킵니다.
// void printMessage() { // 오버라이드 시도
// System.out.println("Trying to override the final method.");
// }
}
Javafinal class FinalClass {
// 클래스 내용
}
// 아래의 코드는 오류를 발생시킵니다.
// class SubClass extends FinalClass { // 상속 시도
// // 하위 클래스 내용
// }
Javafinal MyClass myObject = new MyClass();
// myObject = new MyClass(); // 오류 발생! final 참조 변수는 재할당이 불가능합니다.
Javafinal StringBuilder stringBuilder = new StringBuilder("Hello");
stringBuilder.append(", World!"); // 내부 상태 변경 가능
Java✔️final 키워드를 사용하면 프로그램의 일관성을 유지하고 버그를 방지하며, 코드의 안정성을 높이는 데 도움이 됩니다.
static final은 자바에서 사용되는 키워드의 조합으로, 클래스 레벨에서 사용되는 상수를 나타냅니다. 이는 해당 필드가 클래스의 인스턴스가 아닌 클래스 자체에 속한다는 것을 의미하며, 값이 한 번 할당되면 변경할 수 없는 상수임을 나타냅니다. 상수명은 모두 대문자로 나타냅니다.
public class Constants {
public static final double PI = 3.14;
public static final int MAX_VALUE = 100;
}
JavaConstants.PI = 3.14159; // 오류 발생! static final 필드는 재할당이 불가능합니다.
Javapublic class MathConstants {
public static final double PI = 3.14;
public static final double E = 2.71828;
public static final int MAX_ITERATIONS = 1000;
}
Java✔️위의 예시에서 PI, E, MAX_ITERATIONS는 상수로 사용되며, 다른 클래스에서 해당 클래스를 import하여 사용할 수 있습니다. 상수 값은 변경되지 않고 고정되어 있어야 하므로, static final을 사용하여 정의합니다.
자바에서의 final 키워드는 변수, 메소드, 클래스에 적용되어 다양한 의미를 부여합니다. final로 선언된 변수는 한 번만 초기화되고 그 이후에는 값을 변경할 수 없습니다. 이는 변수가 한 번 초기화되면 그 값을 변경할 수 없도록 고정되어, 상수의 특성을 가지게 됩니다.
메소드에 final을 사용하면 해당 메소드는 하위 클래스에서 오버라이드할 수 없어, 메소드의 구현이 최종적이라는 의미를 전달합니다. 마찬가지로, final로 선언된 클래스는 상속이 불가능하므로, 해당 클래스의 특성이 변하지 않아야 함을 나타냅니다.
또한, final 참조 변수는 한 번만 초기화되고 그 이후에는 값을 변경할 수 없습니다. 그러나 final 변수가 참조하는 객체의 내부 상태는 변경될 수 있습니다. 이는 final 변수가 값을 가지고 있는 것이 아니라 주소를 가리키고 있어서, 그 주소가 가리키는 객체의 내부 상태에는 영향을 주지 않기 때문입니다.
이렇게 final 키워드는 프로그램의 안정성과 일관성을 높이는 데 도움을 주며, 상수, 메소드, 클래스, 참조 변수 등 다양한 요소에 적용되어 사용됩니다.
컴포넌트 스캔이란? 컴포넌트 스캔(Component Scan)은 스프링 프레임워크가 특정 패키지를 탐색하면서, 스캔 대상에 해당하는 클래스를 찾아…
스프링 빈이란? 스프링 빈(Spring Bean)은 스프링 IoC(Inversion of Control) 컨테이너가 관리하는 자바 객체를 의미합니다. 간단히…
스프링 컨테이너(Spring Container)란? 스프링 컨테이너는 스프링 프레임워크에서 가장 핵심적인 부분으로, IoC(Inversion of Control) 개념을 기반으로…
Queue란 무엇인가? Java에서 Queue는 데이터 구조의 일종으로, 데이터를 선입선출(FIFO, First-In-First-Out) 방식으로 처리합니다. 이 글에서는 Queue의…
Stack이란 무엇인가? Java에서 Stack은 자료구조의 한 종류로, 데이터를 순서대로 쌓아 올리는 형태로 운영됩니다. 컴퓨터 과학에서…
소개 자바에서 Map 인터페이스는 키(Key)와 값(Value)의 쌍을 저장하는 자료구조입니다. 이는 연관 배열이라고도 불리며, 각 키는…