ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | Final
    JAVA/JAVA 2020. 1. 31. 17:11

    Final

    final은 '마지막'이라는 뜻으로, 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻을 가진 예약어

    변수, 메소드, 클래스에 사용 가능


    final 사용 위치

    위치 설명
    변수 멤버 변수 및 지역 변수에 모두 사용 가능하며, final 변수는 상수를 의미
    관례적으로 final 변수의 이름은 모두 대문자로 작성
    메소드 final 메소드는 하위 클래스에서 재정의 불가, 읽기 전용 메소드가 됨
    메소드의 원래 목적과 상관 없는 기능으로 변경하는 것을 방지하기 위함
    정적 메소드에 많이 사용됨
    클래스 final 클래스는 상속 불가, 클래스 내부의 어떠한 내용도 수정하지 못하도록 해야 하는 경우에 사용

    사용례_final 변수

    package j200131;
    
    class Parent {
    
        // final + 멤버 변수 or 지역 변수 => 상수화 되어 값이 고정됨
        final int COUNT = 1;
    
        public static void main(String[] args) {
            // Parent 클래스 객체 생성
            Parent p = new Parent();
    
             // 상수 변경 시도 => 에러 발생
    //        p.COUNT = 5;
    //        The final field Parent.count cannot be assigned, 상수는 값을 새롭게 받을 수 없음
    
            System.out.println("p.count: " + p.COUNT);    // p.COUNT: 1
        }
    
    }
    

    사용례_final 메소드

    package j200131;
    
    class Parent {
    
        // final + 메소드 => 상속은 허용하지만 메소드 오버라이딩(재정의) 금지
        final void sub() {
            System.out.println("메소드 재정의 제한");
        }
    }
    
    public class FinalTest extends Parent {
        // final 메소드 오버라이딩 시도 => 에러 발생
        /*    Cannot override the final method from Parent
        void sub() {
            System.out.println("final 메소드는 오버라이딩 불가");
        }
        */
    
        public static void main(String[] args) {
    
        }
    
    }

    사용례_final 클래스

    package j200131;
    
    // final + 클래스 => 상속 금지 클래스
    final class Parent {
    
    }
    
    //    Parent 클래스 상속 시도 => 에러 발생
    //    The type FinalTest cannot subclass the final class Parent
    //    public class FinalTest extends Parent { 
    
        public static void main(String[] args) {
    
        }
    
    }

    클래스, 메소드, 변수 앞에 사용하여 더 이상 수정이나 상속을 하지 못하게 만드는 final 예약어에 대해 알아보았습니다.

    고정된 값이 필요할 때, 메소드의 내용을 하위 클래스에서 오버라이딩하지 못하게 할 때,

    클래스의 상속을 금지할 때 사용하는 것이라고 간단하게 알아두면 되겠습니다.

    댓글

Designed by Tistory.