🏁 final 키워드
final 키워드는 "최종적인", "변경할 수 없는" 이라는 의미를 가진다. 적용 대상에 따라 그 역할이 조금씩 다르다.
1. final 변수
final 변수는 한 번 값이 할당되면 그 값을 변경할 수 없다.
- 지역 변수: 선언 시 또는 최초 한 번만 값을 할당할 수 있고, 이후에는 변경할 수 없다.Java
- final int x = 10; // 선언과 동시에 초기화 // 또는 final int y; y = 20; // 최초 한 번 할당 가능 // y = 30; // 컴파일 오류: final 변수는 재할당 불가능
- 메서드 매개변수: 메서드 내부에서 해당 매개변수의 값을 변경할 수 없다. 전달받은 값이 그대로 사용된다.
- 멤버 변수 (필드): 선언 시 또는 생성자를 통해 한 번만 값을 할당할 수 있다.
- 인스턴스 변수에 final: new로 인스턴스가 생성될 때마다 생성자를 통해 다른 값으로 초기화될 수 있다. 인스턴스마다 고유하지만 생성 후에는 변경할 수 없는 값을 가질 때 사용된다.
- static final 필드 (상수, CONSTANT): static과 final이 함께 붙으면 **상수(Constant)**가 된다.
- 클래스가 로딩될 때 딱 한 번 초기화되며, 프로그램 종료 시까지 변경되지 않는 고정된 값이다.
- 메모리 효율성: static이기 때문에 메모리에 단 하나만 존재하며 모든 곳에서 공유된다.
- 명명 규칙: 대문자로 작성하고, 여러 단어는 언더스코어(_)로 구분하는 것이 관례다 (예: MAX_VALUE, PI).
- 접근 방법: 클래스명.상수명으로 직접 접근한다.
- 사용 목적: 고정된 값(예: 수학적 상수, 최대/최소값, 특정 코드 등)을 정의할 때 사용된다.
2. final 변수와 참조형 변수
final 키워드가 기본형 변수와 참조형 변수에 적용될 때의 의미가 다르다.
- 기본형 변수(int, double 등)에 final: 변수 자체가 저장하는 값을 변경할 수 없다.
- 참조형 변수(String, 객체 등)에 final: 변수가 저장하는 **참조값(메모리 주소)**을 변경할 수 없다. 즉, 한 번 어떤 객체를 참조하도록 할당되면 다른 객체를 참조하도록 바꿀 수 없다는 의미다. 하지만, 참조하고 있는 객체 내부의 값들(필드들이 final이 아닌 경우)은 얼마든지 변경할 수 있다.
- final StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); // 가능 (참조하는 객체 내부의 값 변경) // sb = new StringBuilder("Goodbye"); // 불가능 (참조값 변경 시도)
'JAVA' 카테고리의 다른 글
| [JAVA] 다형성과 중요한 개념들. (0) | 2025.09.22 |
|---|---|
| [JAVA] 상속과 super (0) | 2025.09.20 |
| [JAVA] static에 대하여 알아보자. (0) | 2025.09.16 |
| [JAVA] 번외편: 스택과 큐에 대하여 알아보자. (0) | 2025.09.15 |
| [JAVA] 자바의 메모리 구조(feat. 클래스 로딩과 인스턴스 생성) (0) | 2025.09.14 |