final: 값이 한 번 할당되면 변경할 수 없는 변수를 의미합니다. 선언 시 초기화해야 하며, 이후 다른 값으로 변경할 수 없습니다.
final int constantValue = 10;
// 다음과 같이 선언 후 값 변경 시 컴파일 오류가 발생합니다.
// constantValue = 20; // 오류: cannot assign a value to final variable 'constantValue'
final 메소드: 하위 클래스에서 오버라이드(재정의)할 수 없는 메소드를 의미합니다. 부모 클래스에서 final로 선언된 메소드는 하위 클래스에서 변경할 수 없습니다.
class Parent {
public final void display() {
System.out.println("Parent's display method");
}
}
class Child extends Parent {
// 다음과 같이 오버라이드 시 컴파일 오류가 발생합니다.
// public void display() { } // 오류: cannot override final method
}
final 클래스: 상속할 수 없는 클래스를 의미합니다. final로 선언된 클래스는 다른 클래스가 상속받을 수 없습니다.
final class FinalClass {
// ...
}
// 다음과 같이 FinalClass를 상속하려고 하면 컴파일 오류가 발생합니다.
// class SubClass extends FinalClass { } // 오류: cannot inherit from final FinalClass
static 변수: 클래스의 인스턴스들 사이에 데이터를 공유하는 데 사용됩니다. 모든 인스턴스가 동일한 값에 접근할 수 있습니다.
class Example {
public static int count = 0; // static 변수
}
Example.count++; // 인스턴스 생성 없이 직접 접근 가능
static 메소드: 인스턴스 생성 없이 호출할 수 있는 메소드입니다. 주로 유틸리티 메소드나 헬퍼 함수로 활용됩니다.
class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
int result = MathUtils.add(5, 3); // 인스턴스 생성 없이 호출
static 블록: 클래스가 로딩될 때 실행되는 블록으로, 초기화 코드를 담는 데 사용됩니다.
class Example {
static {
System.out.println("Static block");
// 클래스가 로딩될 때 실행될 코드
}
}
final static (상수): final static은 한 번 할당되면 변경할 수 없는 상수를 의미합니다. 주로 public, static, final 키워드가 함께 사용되며, 클래스 상수로 활용됩니다.
class Constants {
public static final double PI = 3.14159;
public static final String APP_NAME = "MyApp";
}
double circleArea = Constants.PI * radius * radius; // 상수 사용