[JAVA] final

현서황·2024년 9월 20일

JAVA

목록 보기
12/16

자바에서 final 키워드는 수정할 수 없는(불변의) 의미를 가지고 있다.

  • final 키워드는 값, 메서드, 또는 클래스의 변경을 금지하는 데 사용되며, 그 역할은 변수, 메서드, 클래스에 각각 다르게 적용된다.
  • 안정성과 성능을 높이고 예기치 않은 변경을 방지하는 중요한 키워드이다.

final 변수

final로 선언된 변수는 한 번 값이 할당되면 변경할 수 없는 상수가 된다. 기본 데이터 타입과 참조 데이터 타입 모두에 사용할 수 있다.

public class Example {
    public static void main(String[] args) {
        final int MAX_VALUE = 100;
        MAX_VALUE = 200;  // 컴파일 에러 발생: final 변수는 값을 변경할 수 없음
    }
}
public class Example {
    public static void main(String[] args) {
        final StringBuilder sb = new StringBuilder("Hello");
        sb.append(" World");  // 가능: 참조하는 객체의 상태를 변경하는 것은 허용
        sb = new StringBuilder();  // 컴파일 에러 발생: 참조 자체를 변경할 수 없음
    }
}

⭐ 참조변수는 그 변수의 주소값을 가지고 있는 것이므로, 객체 내부 상태를 변경할 수는 있다. 하지만 당연히 참조하는 객체는 변경할 수 없다.


final 메서드

final로 선언된 메서드는 서브클래스에서 오버라이드할 수 없다. 즉, 해당 메서드를 상속받는 하위 클래스에서는 그 메서드를 재정의할 수 없도록 만든다.
즉, 클래스의 메서드 구현을 안전하게 보호하려는 의도로 사용된다.

class Parent {
    public final void display() {
        System.out.println("Parent display");
    }
}

class Child extends Parent {
    // 컴파일 에러 발생: final 메서드는 오버라이드할 수 없음
    @Override
    public void display() {
        System.out.println("Child display");
    }
}

final 클래스

final로 선언된 클래스는 상속할 수 없다. 즉, 다른 클래스가 이 클래스를 상속하여 새로운 클래스를 만들 수 없도록 방지하는 것이다.

final class FinalClass {
    public void display() {
        System.out.println("This is a final class");
    }
}

// 컴파일 에러 발생: final 클래스를 상속할 수 없음
class ChildClass extends FinalClass {
}

final클래스는 불변성을 유지하거나 클래스의 동작을 고정하고 싶을 때 사용된다. 예를 들어, 자바의 String 클래스는 final로 선언되어있다. 이는 String객체가 변경될 수 없는 불변 객체임을 보장한다.

💡 String객체의 값이 한 번 설정되면 그 값을 수정할 수 없으며, 새로운 값을 설정하려면 새로운 String 객체를 생성해야한다.

profile
노는 게 제일 좋은 뽀로로

0개의 댓글