[Java] Final 이란?

728x90

Java의 Final 키워드

Java에서는 불변성을 보장하기 위해 final 키워드를 제공한다.

클래스나 변수에 final을 붙이면 처음 정의된 상태가 변하지 않음을 보장하며 이는 코드의 안정성과 예측 가능성을 높인다. 

기본적으로 Java 변수들은 가변적이지만, final 키워드를 통해 참조 값을 변경할 수 없도록 만들어 불변성을 확보할 수 있다. 

 

final 필드

변수에 final을 붙이면 해당 변수는 초기화 이후 값을 변경할 수 없다.

단, 객체 참조형 변수일 경우 내부 데이터는 수정 가능하나 참조 자체를 변경하는 것은 불가능하다.

 

주로 상수 값 정의 시 사용하며 특정 값이 코드 전체에서 변하지 않아야 할 때 유용하다.

final int MAX_VALUE = 100;
MAX_VALUE = 200; // 오류 발생: final 변수는 값을 변경할 수 없음
final int[] numbers = {1, 2, 3};
numbers[0] = 10; // 배열 내부 값은 변경 가능
numbers = new int[]{4, 5, 6}; // 오류 발생: 참조 변경 불가능

 

final 매개변수

메서드의 매개변수에 final을 붙이면 해당 메서드 내에서 참조 값을 변경할 수 없다.

하지만 메서드 내부에서 매개변수를 사용하는 과정에서 해당 객체의 속성은 변경될 수 있다.

public void printMessage(final String message) {
    message = "New Message"; // 오류 발생: final 매개변수는 변경 불가
    System.out.println(message);
}

 

final 메서드

메서드에 final을 붙이면 해당 메서드는 상속된 클래스에서 재정의(Override)할 수 없다.

이로 인해 메서드의 본래 기능이 보호되며 의도치 않은 변경을 막을 수 있다

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

class Child extends Parent {
    // @Override
    public void display() { // 오류 발생: final 메서드는 재정의할 수 없음
        System.out.println("This won't work.");
    }
}

 

final 클래스

클래스에 final을 붙이면 해당 클래스를 상속받을 수 없다.

이로인해 하위 클래스를 통해 확장이 불가능하다.

public final class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

class MyMath extends MathUtils { // 오류 발생: final 클래스는 상속 불가
}

 

728x90

'Backend > Java' 카테고리의 다른 글

[Java] DTO와 VO의 차이점  (0) 2024.10.15
[Java] 객체 생성 방법  (0) 2024.10.15
[Java] 자바 캡슐화의 이해 (Encapsulation)  (2) 2024.10.09
[Java] JVM : Java Virtual Machine  (0) 2024.10.08
[Java] Exception - 자바 예외 처리  (1) 2024.10.07