본문 바로가기
언어/java

[java] final,static, static final 차이

by 개발LOG 2025. 9. 7.
반응형

 

✅ final 키워드 (상수화 개념)

  • 변수에 사용하면: 값이 한 번만 할당될 수 있다는 뜻입니다.
  • 메서드에 사용하면: 해당 메서드를 오버라이딩(재정의) 할 수 없습니다.
  • 클래스에 사용하면: 그 클래스를 상속할 수 없습니다.

예시:

final int x = 10;
x = 20; // 컴파일 에러! final 변수는 값 변경 불가

✅ static 키워드 (공유 개념, 객체생성x)

  • 클래스에 속한 공용 자원을 만들 때 사용합니다.
  • 인스턴스를 생성하지 않아도 접근할 수 있어요.

예시:

static int count = 0;

public static void main(String[] args) {
    System.out.println(count); // 객체 없이도 사용 가능
}

✅ static final (공유하는 상수의미)

  • 이 조합은 **"값이 한 번만 설정되는 클래스 수준 상수"**를 의미합니다.
  • 대부분 상수(Constant) 를 정의할 때 사용합니다.

예시:

public class Constants {
    public static final double PI = 3.14159;
}
  • PI는 클래스 전체에서 사용할 수 있고, 변경 불가능합니다.
  • static이므로 객체 없이 접근 가능하고, final이므로 값 변경 불가.

✅ 요약 비교

키워드 의미 객체 필요 여부 값 변경
final 한 번만 할당 가능 필요함 ❌ 변경 불가
static 클래스 수준 공유 필요 없음 ✅ 변경 가능
static final 클래스 수준 상수 (공유 + 변경 불가) 필요 없음 ❌ 변경 불가

필요에 따라 사용하는 목적이 달라요:

  • final → 값 변경 금지
  • static → 공유 자원
  • static final → 불변의 공유 자원 (ex. 상수)

 

반응형

'언어 > java' 카테고리의 다른 글

[java] 람다식, 메소드 참조  (0) 2025.09.11
[java] 다형성  (0) 2025.09.09
[java] 열거형 타입 enum  (0) 2025.09.06
[java] Map-HashMap, LinkedHashMap, TreeMap  (0) 2025.05.02
[java] Set-HashSet, LinkedHashSet, TreeSet  (0) 2025.05.02