웹개발/JAVA

[Java] private final vs private static final 차이와 사용 의미

꾸행씨 2026. 2. 4. 14:27
반응형
private final int value;
private static final int MAX_VALUE = 10;

 

실무를 하면서도 굉장히 헷갈렸던 부분이었는데 이번 글에서 제대로 정리해 봐야겠다.

 

private final  vs private static final

형태는 비슷해보이지만, 의미와 역할은 다르다.

 

 1. final의 기본 의미

 

final 은 알다시피 값의 변경을 막는 키워드이다.

final int count = 10;
count = 20; // 컴파일 에러

 

한 번 값이 정해지면, 이후에는 다른 값으로 바꿀 수가 없다.

final의 핵심은 불변성이다.

 

자바에서 final의 의미는 이전 글에서 더 상세하게 볼 수 있다.

 

[Java] 자바에서 final 의미

1. final 한 줄 정의"이건 여기서 끝이야. 더이상 바뀌지마." Java 에서 final은 변경을 금지하는 키워드이다. 2. final을 쓰는 위치 3가지1) 지역변수final int x = 10;x = 20; // ❌ 컴파일 에러 👉 값이 바뀌면

whyjlee.tistory.com


1. private final 의미

1) 의미

객체마다 하나씩 가지는 변경 불가능한 값

 

예를 들면, 이런거다.

개인마다 하나씩 주민등록번호가 발급되면 이건 결코 바뀌지 않는다.

그리고, 다른 사람과 공유하지 않는다.

 

2) 특징

객체가 생성될 때 값이 정해진다.

객체마다 서로 다른 값을 가질 수 있다.

생성자에서 반드시 초기화 해야 한다.

class User {
    private final String userId;

    public User(String userId) {
        this.userId = userId;
    }

   User u1 = new User("A001");
   User u2 = new User("B002");

}

 

객체 u1과 u2의 userId는 객체마다 다르다.


2. static이 추가되면 뭐가 달라지는가?

static은 객체가 아닌 클래스에 소속되는 것을 의미한다.

즉, 객체를 몇 개를 만들든 간에 값은 오직 '하나만' 존재하는 것이다.

모든 객체가 같은 값을 공유하게 된다.


3. private static final

1) 의미

클래스 전체에서 공통으로 사용하는 변경 불가능한 값

 

예를 들면, 회사의 규칙은 직원 수와 관계없이 하나만 존재하며 누구도 임의로 바꿀 수 없다.

회사가 없어지면 그 규칙도 없어진다.

 

2) 특징

- 클래스가 로딩될 때, 즉 자바 프로그램이 실행될 때 한 번만 생성된다.

- 모든 객체가 동일한 값을 참조하며, 실행 중 값 변경이 불가능하다.

class User {
    private static final int MAX_LOGIN_COUNT = 5;
}
User u1 = new User();
User u2 = new User();

u1과 u2는 MAX_LOGIN_COUNT  = 5 라는 값은 값을 사용한다.

 

 

4. 사용 기준

1) private final을 사용하는 경우

- 객체마다 값이 달라야 할 때
- 생성 이후 변경되면 안 되는 값

 

2) private static final을 사용하는 경우

- 모든 객체가 동일하게 사용하는 기준 값
- 정책, 설정, 상수 개념의 값

보통 실무에서는 아래와 같이 사용한다.

private static final int TIMEOUT_SECONDS = 30;
private static final String DEFAULT_ROLE = "USER";

 

마무리

자주 헷갈리는 부분

final이 붙었다고 해서 항상 static이 필요한 것은 아니다.

- final → 값이 바뀌는지 여부
- static → 값이 공유되는지 여부

두 키워드는 역할 자체가 다르다.

 

쉽게 생각해서 값을 공유하냐 안하냐로 생각하면 좋을 듯하다.

둘 다 final 이 붙었기에, 값 변경은 안되고

static 여부에 따라 static이 있으면 값이 객체들 간의 값이 공유되고, 없으면 공유되지 않고 각 객체마다 값이 다르다.

반응형

'웹개발 > JAVA' 카테고리의 다른 글

[Java] 자바에서 final 의미  (0) 2026.02.03
[Java] OpenJDK 와 JDK 차이  (1) 2026.01.29
[바인딩(Binding)] 바인딩 이란  (1) 2022.08.04