Programming

; develop a program

Back-End/Java

[Java] final 예약어

Clloud_ 2023. 2. 8. 14:42
반응형

이번 포스팅에서는 자바(Java)에서 final 예약어에 대하여 공부를 해보고자 한다.

 


final 예약어란

final은 '마지막'이란 의미를 갖고 있다.

즉, 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻이다.

 

자바 프로그램에서 final 예약어는 변수, 메서드, 클래스에 사용할 수 있다.

사용 위치 설명
변수 final 변수는 상수를 의미한다.
메서드 final 메서드는 하위 클래스에서 재정의할 수 없다.
클래습 fianl 클래스는 상속할 수 없다.

 

상수를 의미하는 final 변수

public class Constant {
    int num = 10;
    final int NUM = 100;	//상수 선언

    public static void main(String[] args) {
        Constant cons = new Constant();
        cons.num = 50;
        //cons.NUM = 200; 상수에 값을 대입하여 오류 발생

        System.out.println(cons.num);
        System.out.println(cons.NUM);
    }
}
  • int num과 final int NUM 총 두 개의 변수를 선언했다.
    (변수 이름은 대소문자를 구별하기 때문에 두 변수는 다른 변수다.)
  • 7행에 num으로 선언한 변수에는 다른 값을 대입할 수 있다.
  • 8행에 상수로 선언한 NUM에는 다른 값을 대입할 수 없다.

 

여러 자바 파일에서 공유하는 상수 값 정의

public class Define {
    public static final int MIN = 1;
    public static final int MAX = 99999;
    public static final int ENG = 1001;
    public static final int MATH = 2001;
    public static final double PI = 3.14;
    public static final String GOOD_MORNING = "Good Morning!";
}
  • 프로그램에서 사용할 상수 값들을 선언했다.
  • 상수를 모두 public 예약어로 선언했으므로 이들 값은 외부에서도 사용할 수 있다.
  • 모든 상수를 static으로 선언했기 때문에 인스턴스를 생성하는 것과 관계없이 클래스 이름으로 참조할 수 있다.

 

위에서 선언한 상수를 사용하는 코드

public class UsingDefine {
    public static void main(String[] args) {
    	//static 으로 선언되었으므로 클래스 이름으로 참조한다.
        System.out.println(Define.GOOD_MORNING);
        System.out.println("최솟값은 " +  Define.MIN + "입니다.");
        System.out.println("최댓값은 " +  Define.MAX + "입니다.");
        System.out.println("수학 과목 코드 값은 " + Define.MATH + "입니다.");
        System.out.println("영어 과목 코드 값은 " + Define.ENG + "입니다.");	
    }
}

 

출력 결과

Good Morning!
최솟값은 1입니다.
최댓값은 99999입니다.
수학 과목 코드 값은 2001입니다.
영어 과목 코드 값은 1001입니다.

 


상속할 수 없는 final 클래스

  • 클래스를 final로 선언하면 상속할 수 없다.
  • 상속을 하면 변수나 메서드를 재정의할 수 있는데, 그러면 원래 클래스가 가지고 있는 기능에 오류가 생길 수도 있다.
  • 보안과 관련되어 있거나 기반 클래스가 변하면 안 되는 경우에는 클래스를 final로 선언한다.
  • JDK에서 제공하는 String이나 Integer 클래스가 대표적이다.

 


반응형