본문 바로가기
프로그래밍/JAVA

초보 자바 프로그래밍(61) - final 키워드의 활용과 주의점

by 머니테크리더 2025. 3. 26.
반응형

final 키워드 활용과 주의점

 

 

 

final 키워드란?

자바에서 final 키워드는 변경이 불가능하도록 제한하는 역할을 하며, 변수, 메서드, 클래스에서 각각 다르게 동작합니다. final을 적절히 활용하면 코드의 안정성과 유지보수성을 높일 수 있습니다.

 

final 키워드의 주요 활용법

final 변수

final 키워드를 변수에 적용하면 값을 한 번만 할당할 수 있으며, 이후 변경이 불가능합니다.

 

멤버 변수에서 final 사용

class Constants {
    final int MAX_VALUE = 100; // 변경 불가능한 상수
    
    void display() {
        System.out.println("최대 값: " + MAX_VALUE);
    }
}

public class FinalVariableExample {
    public static void main(String[] args) {
        Constants obj = new Constants();
        obj.display();
        // obj.MAX_VALUE = 200; // 오류 발생: final 변수는 변경할 수 없음
    }
}

주의점: final 멤버 변수는 반드시 선언과 동시에 초기화하거나, 생성자를 통해 초기화해야 합니다.

 

 

final 지역 변수

public class FinalLocalVariableExample {
    public static void main(String[] args) {
        final int num = 10;
        System.out.println("숫자: " + num);
        // num = 20; // 오류 발생
    }
}

주의점: final 지역 변수는 한 번 값을 설정하면 변경할 수 없습니다.

 

 

final 참조 변수

class Car {
    String model = "Kia";
}

public class FinalReferenceExample {
    public static void main(String[] args) {
        final Car myCar = new Car();
        System.out.println("자동차 모델: " + myCar.model);
        
        myCar.model = "Hyundai"; // 가능 (객체 내부 값 변경 가능)
        System.out.println("변경된 모델: " + myCar.model);
        
        // myCar = new Car(); // 오류 발생 (참조 변수 변경 불가능)
    }
}

주의점: final 참조 변수는 객체의 참조 자체를 변경할 수 없지만, 객체 내부의 상태는 변경할 수 있습니다.

 

 

 

final 메서드

메서드에 final을 선언하면, 서브클래스에서 해당 메서드를 오버라이딩할 수 없습니다.

class Parent {
    final void show() {
        System.out.println("부모 클래스의 메서드");
    }
}

class Child extends Parent {
    // void show() { } // 오류 발생: final 메서드는 오버라이딩할 수 없음
}

public class FinalMethodExample {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();
    }
}

주의점: final 메서드를 사용하면 메서드의 동작을 변경할 수 없으므로 설계 단계에서 신중히 결정해야 합니다.

 

final 클래스

클래스에 final을 선언하면 상속할 수 없습니다. 즉, 해당 클래스는 더 이상 서브클래스를 가질 수 없습니다.

final class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

// class Dog extends Animal { } // 오류 발생: final 클래스는 상속할 수 없음

public class FinalClassExample {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.sound();
    }
}

주의점: final 클래스를 선언하면 재사용성과 확장성이 제한될 수 있으므로, 반드시 필요할 때만 사용해야 합니다.

 

final 키워드 사용 시 주의점

  1. final 변수는 한 번 값을 설정하면 변경할 수 없습니다. 단, 참조형 변수의 경우 객체 내부 상태는 변경할 수 있습니다.
  2. final 메서드는 서브클래스에서 오버라이딩할 수 없어, 기능을 확장할 수 없습니다.
  3. final 클래스는 상속이 불가능하여, 확장성이 제한될 수 있습니다.
  4. 성능 향상에는 큰 영향을 주지 않으며, 컴파일러가 최적화를 수행하는 정도에 따라 차이가 있을 수 있습니다.

 

결론

자바의 final 키워드는 불변성을 유지하고, 코드의 안정성을 높이는 데 유용한 도구입니다. 하지만 무분별한 사용은 코드의 유연성을 떨어뜨릴 수 있으므로, 상황에 맞게 적절히 활용하는 것이 중요합니다.

 

 

댓글