Java final field / static final

jooog·2021년 9월 25일
0

final field에 대해 알아보자

final 필드란 딱 한번 초기값을 지정하면 값을 변경할 수 없는 필드를 말한다

public class finalExample {
	
	final String name = "sally";
	//다시 수정할 수 없는 변수
	final String color;
	String job;
	
}

위의 코드에서 final이 붙은 name의 value는 다시 수정할 수 없다

그렇다면 초기값을 지정하지 않은 color는 무엇일까?

final String color;
final이 붙었지만 초기값을 설정하지 않으면 생성자를 통해 초기값을 설정해줄 수 있고 설정된 초기값은 다시 수정할 수 없다.

public class finalExample {
	
	final String name = "sally";
	//다시 수정할 수 없는 변수
	final String color;
	String job;
	
	public finalExample(String a, String b) {
		this.color = a;
		this.job = b;
	}
	
}

매개변수 String a, String b를 받는 생성자를 만들고
생성자를 통해 color와 job의 초기값을 설정했다

그렇다면 어떤 경우 final field를 사용하는 것일까?

절대 변하지 않고 고정적으로 사용하는 값은 final field로 설정한다

위의 코드에서 확인할 수 있는 것처럼 final field의 초기값을
설정하는 방법은 크게 두가지다

final String name = "sally";

첫번째, 선언할 때 값을 설정해준다

public finalExample(String a, String b) {
		this.color = a;
		this.job = b;
	}

두번째, 생성자를 통해 딱 한번 초기값을 설정해준다

String job;
일반 인스턴스 필드이기 때문에 언제든 수정할 수 있다

그렇다면 상수(static final)와의 차이점은 무엇일까?

상수는 정적 final 필드라고 하는데 final field와의
공통점은 한번 값을 설정하면 수정할 수 없다는 점이다

상수(static final)는 객체마다 가지고 있는 것이 아니라 메소드 영역 내에서 관리되는 필드를 의미한다

static final String COMPANY_TITLE = "ABC";
static final String TABLE_NAME = "ABCDE";

상수(static final)는 위의 코드처럼 전부 대문자로 사용하는 것이 관례다
그리고 다른 단어가 결합되는 경우에는 _(under bar)로 연결해준다

static final String NOTEBOOK_MODEL;

static {

NOTEBOOK_MODEL = "b12345";

}

상수의 초기값을 설정할때는 선언하면서 설정해줄 수도 있고
위의 코드처럼 static 블록 내에서 딱 한번 값을 설정해줄 수 있다

0개의 댓글