[Java] final vs static vs static final

2025. 9. 22. 01:22·Java

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://gobae.tistory.com/3

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
'Java' 카테고리의 다른 글
  • [Java] 제네릭(Generic)
  • [Java] 인터페이스 vs 추상 클래스
  • [Java] JVM(Java Virtual Machine)
  • [Java] LocalDate / LocalTime / LocalDateTime 클래스
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    머신러닝
    운영체제
    os
    인공지능
    자바
    Ai
    java
    딥러닝
    database
    백준
    Python
    프로그래머스
    TensorFlow
    CS
    파이썬
    android
    안드로이드
    db
    baekjoon
    코딩 테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
[Java] final vs static vs static final
상단으로

티스토리툴바