JAVA

[JAVA] staic 과 final

경딩 2024. 10. 29. 13:33

staic과 final 은 둘 다 java에서 사용되는 키워드로 서로 다른 목적과 역할을 가지고 있습니다.

static 이란?

 

https://namu.wiki/w/Java%20Virtual%20Machine

 

정적 키워드로, 참조를 고정해 줍니다. 참조를 고정해 주기 위해서는 해당 객체가 없어지거나 재생성되면 안 되겠죠?

그래서 gc 가 발생하는 힙이 아니라 메타스페이스에 할당을 해서 객체를 유지시켜 줍니다. 

클래스가 로드될 때 메모리에 메타스페이스에 할당돼서 프로그램 시작부터 종료까지 남아있습니다. 즉 메모리가 항상 상주하고 있는 영역입니다.

때문에 인스턴스 생성 없이도 접근 가능하면 모든 인스턴스에 공유됩니다.

 

공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메서드를 선언하고자 할 때 사용합니다.

  • static 변수를 선언하면 클래스 로딩 시점에 메모리에 할당되고 모든 객체에서 공유됩니다.
  • static 메서드는 인스턴스 생성 없이 클래스 이름으로 접근할 수 있습니다.

 

동적은 객체를 런타임 도중에 힙 영역에 할당하는 행위를 말합니다.

반대로, 정적은 프로그램이 시작되는 시점에 클래서 로더가 클래스를 해석하여 메서드 영역 혹은 힙 영역에 클래스 메타 데이터 및 정적 변수를 적재한다.

 

final 이란?

상수화 키워드로 해당 요소를 변경할 수 없도록 합니다.

 

특징

  • 변수 : final로 선언된 변수는 초기화 후에 값을 변경할 수 없습니다. 주로 상수를 정의할 때 사용됩니다
  • 메서드: final 로 선언된 메서드는 서브클래스에서 오버라이드 할 수 없습니다
  • 클래스 : final 로 선언된 클래스는 자식 클래스로 확장시킬 수 없습니다.

 

요약

  • stiatic 은 클래스 간의  공통적인 속성을 모든 인스턴스가 공유할 수 있도록 합니다.
  • final 은 값을 변경할 수 없도록 상수화합니다.

 

 

참고 자료 : https://steady-coding.tistory.com/603

'JAVA' 카테고리의 다른 글

[JAVA] Grabage Collection Basics  (0) 2024.11.05
[JAVA] Error 와 Exception  (0) 2024.11.01
== 와 equals 차이 , hashcode  (0) 2024.10.24
[Java] Call by Value 와 Call by Reference  (6) 2024.10.21
[자바의 신] 정리해봅시다 [1장~ 10장]  (0) 2024.10.19