카테고리 없음

java final, static, final static

Code Canvas 2025. 4. 2. 14:09

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; // 상수 사용