Post

Java 문법 (9) - Final

Java 문법 (9) - Final




Final 변수


final이 붙은 변수는 최초에 값을 할당할 때를 제외하고 값을 변경할 수 없습니다. 매개변수에 final이 붙으면 메서드 내부에서 매개변수의 값을 변경할 수 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package final1;
public class FinalLocalMain {
	public static void main(String[] args) { //final 지역 변수1
		final int data1;  
		data1 = 10; //최초 한번만 할당 가능 
		//data1 = 20; // 컴파일 오류 변경 불가능	
		//final 지역 변수2  
		final int data2 = 10; //data2 = 20; //컴파일 오류
         method(10);
     }
     static void method(final int parameter) {
		//parameter = 20; 컴파일 오류 변경 불가능
	}
 }


클래스의 필드에서 사용할 때는 생성자를 통해서 초기화 해주고, 그 이후에는 변경할 수 없도록 코드를 작성할 수 있습니다.

예시의 final int value2 = 10; 처럼 초기화 해줄 수 있지만, 모든 객체가 10이라는 값을 고정적으로 갖게 됩니다. 이렇게 하면 메모리 낭비가 될 수 있고, 의미가 없기 때문에 이처럼 사용하지는 않고 상수를 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
 package final1;

//final 필드 - 생성자 초기화 
public class ConstructInit {
	final int value;
	final int value2 = 10; // 모든 객체가 10으로 고정, 의미가 없음.
	
    public ConstructInit(int value) {
         this.value = value;
	} 
}




상수


상수는 변하지 않고 항상 일정한 값을 갖는 수를 말합니다. 자바에서 보통 단 하나만 존재하는 변하지 않는 고정된 값을 상수라고 합니다. 상수는 static final 키워드를 사용합니다. 관례로 변수의 이름은 대문자를 사용하고 _ (언더 스코어로) 구분합니다. ex) MAX_NUMBER

보통 상수는 애플리케이션 전반에서 사용되기 때문에 public을 주로 사용합니다. 상수는 중앙에서 값을 하나로 관리할 수 있습니다. 런타임 중에는 상수를 변경할 수 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
package final1;

//상수  
public class Constant {
	//수학 상수  
	public static final double PI = 3.14;  
	//시간 상수  
	public static final int HOURS_IN_DAY = 24; 
	public static final int MINUTES_IN_HOUR = 60; 
	public static final int SECONDS_IN_MINUTE = 60; 
	//애플리케이션 설정 상수  
	public static final int MAX_USERS = 1000;
}