final과 const

moon.kick·2025년 2월 23일

Java에서는 final이 중요한 키워드지만, const는 거의 사용되지 않습니다. finalconst의 개념을 비교하면서 왜 그런지 설명해줄게.

1. final의 역할

Java에서 final값 변경을 방지하는 역할을 한다. 선언 위치에 따라 의미가 달라진다.

  • 변수에 사용 → 해당 변수는 한 번만 초기화할 수 있음.

    final int a = 10;
    a = 20; // 컴파일 오류 발생 (값 변경 불가)
  • 객체 참조에 사용 → 객체 자체의 참조 변경 불가, 하지만 객체 내부의 속성은 변경 가능.

    final List<String> list = new ArrayList<>();
    list.add("Hello"); // 가능
    list = new ArrayList<>(); // 불가능 (컴파일 오류)
  • 메서드에 사용오버라이딩 불가.

    class Parent {
        final void show() {
            System.out.println("Hello");
        }
    }
    
    class Child extends Parent {
        // void show() { System.out.println("World"); } // 컴파일 오류
    }
  • 클래스에 사용상속 불가.

    final class Car { } 
    class SportsCar extends Car { } // 컴파일 오류

2. const는 왜 거의 사용되지 않나?

Java에는 const 키워드가 존재하지만, 예약어로만 존재하며 실질적으로 사용할 수 없다. (C++/JavaScript처럼 const로 변수를 선언할 수 없음.)

Java에서 const의 역할은 static final을 사용하면 대체할 수 있다.

class Constants {
    static final double PI = 3.14159;
}

이렇게 하면 Constants.PI상수(constant)처럼 동작하며, 클래스가 로드될 때 한 번만 초기화된다.


3. 결론

  • final은 Java에서 필수적으로 쓰이는 키워드이며, 변수/메서드/클래스에서 변경을 방지하는 역할을 함.
  • const는 Java에서 사용할 수 없는 예약어이며, 대신 final 또는 static final을 사용하면 동일한 효과를 얻을 수 있음.
  • 상수는 static final을 사용하여 선언하는 것이 일반적임.

즉, Java에서 final은 중요하지만 const는 신경 쓸 필요 없음.

profile
@mgkick

0개의 댓글