2020-11-21
final 이름에서도 느껴지듯이 자바에서 final이 선언된 값은 프로그램 실행 도중 변경을 할 수 없다. 때문에 초기화 준 값에서 바뀌지 않는다는 것인데, 초기화 방법을 알아보자.
public class tFinal {
final String name = "홍길동";
//필드에서 초기화 하는 방법
final String bloodType;
public tFinal(String bloodType) {
this.bloodType = bloodType;
}
//생성자에서 초기화 하는 방법
}
위의 코드에서 볼 수 있듯이 final 을 초기화하는 방법은 필드와 생성자를 통해서만 초기화할 수 있다. 단순한 값이라면 필드에서 선언하는 것이 좋으며, 외부에서 입력받아야만 하는 값이라면, 생성자를 이용해서 초기화하는 것이 효율적이다.
(다만 주의할 점은 final 의 경우 해당 필드를 초기화하지 않고 그대로 남겨두면 컴파일 상에 오류가 발생한다.)
아래와 같이 초기화되지 않고 기본생성자만 선언 시 오류가 발생한다.
마찬가지로 메인클래스에서 새로운 객체를 통해 final 값을 변경하려고 해도 오류가 발생한다.
static final은 final 과 다른 점은 객체마다 따로 저장할 필요가 없는 공용성을 가지고 있는 점이다. 때문에 static을 추가적으로 선언을 해줌으로써 객체를 생성시키지 않고도 사용할 수 있다.
때문에 생성자를 통한 초기화가 아닌 static을 통해 초기화시켜야 한다. 코드는 아래와 같다.
(외부로 입력받아 초기화 시킬 수 없기 때문에 this를 통한 초기화가 되지 않는다.)
public class tStaticFinal {
static final String name = "홍길동";
//필드에서 초기화 하는 방법
static final String bloodType;
static {
bloodType = "A";
}
//static에서 초기화 하는 방법
}
위에 이미지 처럼 객체를 생성하지 않고 사용할 수 있으며, console 창에도 정상적으로 해당 값이 출력되는 것을 확인할 수 있다.