** final : final 키워드가 붙으면 더이상 값을 변경할 수 없다. final은 class, method를 포함한 여러 곳에 붙을 수 있다.
package final1;
public class FinalLocalMain {
public static void main(String[] args) {
// final 지역 변수
final int data1;
data1 = 10; // 최초 한번만 할당 가능
// 컴파일 오류
// data1 = 2;
// final 지역 변수2
final int data2 = 10;
// data2 = 20; 컴파일 오류
}
static void method(final int parameter) {
//컴파일 오류
// parameter = 20;
}
}
- 위 예시 코드와 같이 final을 지역 변수에 설정할 경우 최초 한번만 할당할 수 있다.
final - 필드(멤버 변수)
package final1;
public class ConstructInit {
final int value;
public ConstructInit(int value) {
this.value = value;
}
}
package final1;
public class FieldInit {
static final int CONST_VALUE = 10;
final int value = 10;
}
package final1;
public class FinalFieldMain {
public static void main(String[] args) {
// final 필드 - 생성자 초기화
System.out.println("생성자 초기화");
ConstructInit constructInit1 = new ConstructInit(10);
ConstructInit constructInit2 = new ConstructInit(20);
System.out.println(constructInit1.value);
System.out.println(constructInit2.value);
// final 필드 - 필드 초기화
System.out.println("필드 초기화");
FieldInit fieldInit1 = new FieldInit();
FieldInit fieldInit2 = new FieldInit();
FieldInit fieldInit3 = new FieldInit();
// fieldInit1.value = 20;
System.out.println(fieldInit1.value);
System.out.println(fieldInit2.value);
System.out.println(fieldInit3.value);
// 상수 접근
System.out.println("상수");
System.out.println(FieldInit.CONST_VALUE);
}
}
실행 결과
생성자 초기화
10
20
필드 초기화
10
10
10
상수
10

- FieldInit과 같이 필드를 필드에서 초기화 하는 경우, 모든 인스턴스가 위 오른쪽 그림과 같이 값을 가진다.
- 3개가 같은 값을 가지므로 결과적으로 메모리 낭비로 이어질 수 있고 중복된 코드가 발생한다. 따라서 static 영역을 이용하고 final키워드를 사용하여 초기화 값이 변하지 않게 하면된다.
상수(Constant)
- 자바에서는 보통 단 하나만 존재하는 변하지 않은 고정된 값을 상수라 한다.
- 자바 상수 특징
- static final 키워드를 사용
- 대문자를 사용하고 구분은_(언더바)로 한다.(관례)
- 필드를 직접 접근해서 사용한다.
'Java' 카테고리의 다른 글
| Java 기본 - 다형성 1 (2) | 2025.01.22 |
|---|---|
| Java 기본 - 상속 (0) | 2025.01.03 |
| Java 기본 - 자바 메모리 구조 및 static (1) | 2024.12.25 |
| Java 기본 - 접근제어자 (0) | 2024.12.21 |
| Java 기본 - 생성자 (0) | 2024.12.08 |