[Java] static, final, static final의 차이

hyunoi·2024년 11월 5일
0

Java

목록 보기
2/20
post-thumbnail

세 가지의 차이에 대해 알아보자

static


static = '고정된'
객체 생성 없이 사용하고 싶은 필드와 메소드를 지정할 때 활용한다.

프로그래밍 언어에서 정적, 전역의 의미로 사용된다.
자바에서는 static을 붙이면 이 메소드나 변수의 메모리 할당을 컴파일 시간에 할 것을 의미한다.
동적 데이터와 다르게 정적 데이터 즉, static 데이터는 메소드 영역에 저장되기 때문에 가비지 컬렉터가 작동하지 않아서 프로그램 실행 직후부터 끝날 때까지 메모리 수명이 유지된다.

메소드 영역?

JVM에서 프로그램 시작부터 종료까지 고정적으로 존재하는 공간
static으로 선언된 데이터는 프로그램 전체에서 공유되고, 특정 객체의 소멸과 관계 없이 프로그램 실행 종료 시까지 남아야 하기 때문에 가비지 컬렉션의 관리 대상이 되지 않는 것이다.

final


final = '최종적인'
값이 한 번 저장되면 수정이 불가능하다는 뜻

보통 생성자를 주입받을 때 변수를 final로 선언하여 인스턴스의 변경을 막아준다.

final은 데이터의 종류에 따라 여러가지 의미를 가진다.

  • 변수: 해당 변수는 처음 한 번만 초기화 가능
    하지만 값을 받아오기 전까지는 어떤 값도 할당 가능 (완전한 상수는 아님)
  • 메소드: 해당 메소드를 오버라이드할 수 없음
  • 클래스: 해당 클래스는 상속할 수 없음

static final


static final = '고정된' + '최종적인'
이게 정말 완전한 상수이다.

상수란 변하지 않는 값을 뜻하는데, final의 경우 값을 받아오기 전까지는 값의 변경이 가능하므로 완전한 상수라고 할 수 없는 것이다.

static final은 처음부터 값을 할당해주어야 한다.

참고 자료

Java | 상수는 왜 static final로 선언할까?
[Java] static, final, static final의 차이
[Java] static, final, static final의 차이

0개의 댓글