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

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

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

final 키워드 활용과 주의점

 

🔖 INDEX

     

     

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

     

     

    반응형

    댓글