final
final은 한 번 값을 저장하면, 더 이상 수정이 불가능하다.
final을 적용할 수 있는 곳은 총 3곳이다.
| final을 적용할 경우 | |
| 변수 | 한 번 값을 저장하면, 더 이상 수정이 불가능하다. |
| 메소드 | 해당 메소드를 오버라이딩할 수 없다. |
| 클래스 | 해당 클래스를 상속할 수 없다. |
static
static은 객체를 생성하지 않고 호출할 수 있다.
static을 적용할 수 있는 곳은 총 3곳이다.
| static을 적용할 경우 | |
| 변수 | 클래스 단위로 변수를 공유한다. |
| 메소드 | 객체 생성 없이 클래스명.메소드이름()로 호출할 수 있다. |
| 정적 중첩 클래스 | 외부 클래스의 static 멤버에만 접근할 수 있으며, 외부 클래스의 인스턴스 없이 바로 생성하여 사용할 수 있다. |
static은 JVM이 실행되는 동안 메소드 영역에 유지된다.
따라서 Garbage Collection의 대상이 되지 않는다.
사용 예시는 다음과 같다.
class Outer {
static int value;
static void hello() {
System.out.println("Say hello!! " + Outer.value);
}
static class StaticNested {
void hi(int value) {
Outer.value = value;
System.out.println("Say hi!! " + Outer.value);
}
}
}
public class Main extends Outer {
static int y;
public static void main(String[] args) {
y = 10;
Outer.value = y;
Outer.hello(); // Say hello!! 10
Outer.StaticNested sn = new Outer.StaticNested();
sn.hi(Outer.value); // Say hi!! 10
sn.hi(100); // Say hi!! 100
}
}
- 클래스 내의 static 변수(value와 y)와
클래스 내의 static 메소드(hello())는 → 객체를 생성할 필요없이 바로 접근이 가능하다. - 정적 중첩 클래스(StaticNested)는 → 외부 클래스의 객체를 생성할 필요없이 바로 접근이 가능하다.
static final
static final은 주로 상수를 선언할 때 사용한다.
위의 두 개념을 합쳐보면, 객체를 생성하지 않고 호출할 수 있는 불변의 값을 의미한다.
자칫 헷갈릴 수 있는 세 키워드에 대해 알아보았다.
각 의도에 맞게 static, final, static final을 사용하도록 하자!!
👏
참고
https://develop-sense.tistory.com/entry/JAVA-static-final-%EC%83%81%EC%88%98
'Java' 카테고리의 다른 글
| [Java] 제네릭(Generic) (0) | 2025.10.06 |
|---|---|
| [Java] 인터페이스 vs 추상 클래스 (0) | 2025.10.03 |
| [Java] JVM(Java Virtual Machine) (1) | 2025.08.30 |
| [Java] LocalDate / LocalTime / LocalDateTime 클래스 (2) | 2025.06.06 |
| [Java] Date 클래스 (0) | 2025.06.04 |