JAVA Basic) final 예약어
Programming/Java 기초

JAVA Basic) final 예약어

반응형

 

목차


     

    <final 예약어>

    템플릿 메서드를 만들면서 'final 예약어'를 사용했다. 'final'은 '마지막'이라는 의미로 마지막으로 정했으니 더 이상 수정은 불가능하다는 뜻으로 사용된다.
    자바에서 'final예약어'변수, 메서드, 클래스에서 사용할 수 있다.

    final예약어의 사용

     

    <상수, final 변수>

    상수는 '변하지 않는 수'이다.

    package finalex;
    
    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)를 선언했다. 상수를 선언할 때는 일반 변수와 구별하기 위해 대문자로 쓰는 경우가 많다.
    •  num변수에는 다른 값을 대입할 수 있지만, flinal로 선언한 NUM변수에는 다른 값을 대입할 수 없다.

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

    하나의 자바 파일에서만 사용하는 상수값은 해당 파일 안에서 정의해서 사용할 수 있다. 그런데 우리가 프로젝트를 하다 보면 여러 파일에서 똑같이 공유해야 하는 상수 값도 있다.
    예를 들어 최솟값(MIN), 최댓값(MAX), 전체에서 공통으로 적용하는 과목 코드 값 등이 있겠다.
    이런 값을 파일마다 선언한다면 코드가 중복될 뿐만 아니라 값이 변하거나 추가될 때 그 값을 사용하는 파일을 모두 수정해야 한다.

    따라서 자바로 프로젝트를 진행할 때 여러 파일에서 공유해야 하는 상수 값은 한 파일에 모아 public static final로 선언하여 사용하면 좋다.

    package finalex;
    
    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!";
    }

    Define.java파일을 하나 만들고 프로그램에서 사용할 상수 값들을 선언했다. 최솟값, 최댓값, 과목 코드들과 원주율, 문자열 등을 상수로 선언했다. 상수를 모두 public예약어로 선언했으므로 이 값들은 외부에서도 사용할 수 있다.
    그리고 모든 상수를 static으로 선언해서 인스턴스를 생성하는 것과 관계없이 클래스 이름으로 참조할 수 있다.

    그럼 상수를 사용하는 예제 코드를 보자.

    package finalex;
    
    public class UsingDefine {
    	public static void main(String[] args) {
    		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);
    	}// static으로 선언되어 인스턴스를 생성하지 않고 클래스 이름으로 참조 가능
    }

     

    <상속X, final 클래스>

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

    JDK에서 제공하는 클래스 중에서도 final로 선언한 클래스가 있다. 대표적으로 문자열을 나타내는 String이나 정수 값을 나타내는 Intager클래스를 예로 들 수 있다. 이러한 클래스가 상속되면 클래스를 만들 때 의도한 바와 ㄱ다ㅡㄹ게 사용될 수 있으므로 final로 선언한다.

    <프로그램을 잘 구현하는 또 다른 방법>

    지금까지 프로그램을 짤 때 클래스를 순서대로 구현해 나갔다.(Player클래스 -> PlayerLevel클래스 -> 각 레벨 클래스들 순으로) 그러면 이제는 거꾸로 진행해 보도록 해보자.
    패키지나 프로젝트를 새로 만들고 맨 먼저 최종 실행파일 MainBoard.java부터 만드는 것이다.

    package test;
    
    public class MainBoard {
    	public static void main(String[] args) {
    		Player player = new Player();	//오류 발생
    		player.play(1);
    		
    		AdvencedLevel aLevel = new AdvencedLevel();	//오류 발생
    		player.upgradeLevel(aLevel);
    		player.play(2);
    		
    		SuperLevel sLevel = new SuperLevel();	//오류 발생
    		player.upgradeLevel(sLevel);
    		player.play(3);
    	}
    }

    여러 오류 메시지가 나오는데, 이제 오류 메시지를 없앨 수 있도록 코드를 수정하며 프로그램을 구현하는 것이다.


    [Do it! 자바 프로그래밍 입문] 도서로 공부하며 정리한 글입니다.

    반응형