클래스를 만들며 생성한 멤버 변수(필드)들은 언제든지 자유롭게 값을 변경할 수 있습니다. 하지만 때에 따라서는 값을 고정시키고 읽기만을 허용시켜야하는 경우가 있습니다. 이때 사용하는 키워드가 바로 final
입니다.
final
키워드를 사용해서 선언한 멤버 변수는 초기화 이후로는 값을 변경할 수 없습니다. final
필드는 다음과 같이 변수 선언 맨 앞에 final
키워드를 붙여 선언합니다.
final 타입 이름 = 초기값;
//외부로부터 값을 받는다면 생성자에서 초기화도 가능
선언과 동시에 초기화 또는 생성자를 이용한 초기화를 하지 않는다면 오류가 발생합니다.
다음 코드는 final
필드를 사용한 클래스입니다.
public class Car {
final public String color;
public Car() {
this("White");
}
public Car(String color) {
this.color = color;
}
}
public static void main(String[] args) {
Car car1 = new Car("Black");
Car car2 = new Car();
System.out.println("car1의 색상: " + car1.color);
System.out.println("car2의 색상: " + car2.color);
}
만약 final
필드를 변경하려고 하면 다음과 같이 final 필드를 변경할 수 없다
는 오류를 발생시킵니다.
Car car1 = new Car("Black");
Car car2 = new Car();
car1.color = "Yellow";
클래스에도 final
키워드를 붙일 수 있습니다. 클래스에 final
이 붙는 경우 상속을 할 수 없습니다.
final
이 붙은 메소드의 경우 메소드 오버라이딩을 할 수 없습니다.
상수(constant)
는 원주율을 나타내는 수학 기호 파이의 값 3.14
처럼 변하지 않는 값을 말합니다. 이러한 상수는 변하지 않고, 여러 번 선언할 이유도 없기 때문에 전역에서 사용할 수 있도록 static
과 변하지 않는 final
키워드를 두 개를 동시에 사용해서 상수를 선언합니다.
static final double pi = 3.14;