final
final은 값을 고정하는 키워드이다.
final - 지역 변수
- 최초 한번만 할당 가능하다. 할당 후 값을 변경할려고 하면 에러가 발생한다.
final - 매개 변수
- 인자로 들어온 값의 변경이 불가능하다. 변경 시도 시 에러가 발생한다.
- 매개 변수가 메서드 내에서 변하지 않는다는 것을 명시하기 위해 final 을 붙이는 경우가 종종 있다.
public class FinalLocalMain {
public static void main(String[] args) {
// final 지역변수
final int data1;
data1 = 10; // 최초 한번만 할당 가능
// data1 = 20; // 컴파일 오류
// final 지역변수2
final int data2 = 10; // 값이 이미 할당됨
// dat2 = 20; // 컴파일 오류
method(10); // 10으로 param 고정됨
}
static void method(final int param) {
// param = 20; // param의 값이 이미 10으로 고정됨
}
}
final - 필드(맴버 변수)
- 필드에 사용 시 인스턴스 생성 할 때 할당하고 그 뒤에 수정은 불가능하다.
- 생성할 때 할당하는 이유는 할당 x 시 타입의 기본값이 들어가서다.(아래 value2 참고)
static final - 상수
- static + final 키워드가 있는 변수
- 프로그램 전 범위에서 공유되는 고정된 값
- 인스턴스 생성 없이 호출 가능. (이유는 static 변수와 동일)
- 대문자로 작성한다 ex) TEST_VALUE
public class TestFinal {
final int value = 10; // 이미 할당 되어 있어서 수정 불가
final int value2; // 생성자를 통해 1번만 할당 가능 그 뒤 수정 불가
static final int TEST_VALUE = 30; // 상수, static이 붙어 있어서 프로그램 전 범위 사용 가능
// value2에 값이 없어서 생성자를 통해 무조건 할당해야함.
// 이유는 값 세팅 x 시 int의 기본값인 0이 들어가서 에러 발생
public TestFinal(int value2) {
this.value2 = value2;
}
public static void main(String[] args) {
TestFinal testFinal = new TestFinal(20);
System.out.println(testFinal.value);
System.out.println(testFinal.value2);
System.out.println(testFinal.value);
}
}
final 변수와 참조
final 변키워드를 기본 자료형이 넣는 것과 참조 자료형에 넣는 것에 따라 차이가 존재한다.
- 기본 자료형: 값 자체의 변경을 막는다.
- 참조 자료형: 참조값의 변경을 막는다. 단 필드의 변경을 막지는 못한다.
public class FinalLocalMain {
public static void main(String[] args) {
// final 지역변수
final int data1;
data1 = 10; // 최초 한번만 할당 가능
// data1 = 20; // 컴파일 오류
// final 지역변수2
final int data2 = 10; // 값이 이미 할당됨
// dat2 = 20; // 컴파일 오류
method(10); // 10으로 param 고정됨
// 다른 파일에 있는 상수를 불러옴
int testValue = TestFinal.TEST_VALUE;
}
static void method(final int param) {
// param = 20; // param의 값이 이미 10으로 고정됨
}
}
final 활용하기
- 매개 변수가 메서드 내에서 변하지 않는다는 것을 명시하기 위해 final 을 붙이는 경우가 있다.
- 프로그램에서 공통적으로 사용하는 것에 static final 키워드를 붙여 상수로 만든다.
- 지역, 맴버 변수에 값을 고정해야 할 경우 final 키워드를 붙인다.
- 값을 고정해야 한다면 변수에 final을 붙이자
public class FinalLocalMain {
public static void main(String[] args) {
// final 지역변수
final int data1;
data1 = 10; // 최초 한번만 할당 가능
// data1 = 20; // 컴파일 오류
// final 지역변수2
final int data2 = 10; // 값이 이미 할당됨
// dat2 = 20; // 컴파일 오류
method(10); // 10으로 param 고정됨
int testValue = TestFinal.TEST_VALUE;
}
static void method(final int param) {
// param = 20; // param의 값이 이미 10으로 고정됨
}
}
🔗레퍼런스
참고 강의/글
- 인프런 김영한의 자바 기본편
- 자바의 정석
- 페스트켐퍼스 시그니처 백엔드. [course 1]
'Java' 카테고리의 다른 글
| 29. static (2) | 2025.08.19 |
|---|---|
| 28. 접근 제어자 (1) | 2025.07.28 |
| 27. 생성자 (1) | 2025.07.25 |
| 26. 절차지향 VS 객체지향 (1) | 2025.07.24 |
| 25. 기본형과 참조형, 변수와 초기화 그리고 null (0) | 2025.06.24 |