staic과 final 은 둘 다 java에서 사용되는 키워드로 서로 다른 목적과 역할을 가지고 있습니다.
static 이란?
정적 키워드로, 참조를 고정해 줍니다. 참조를 고정해 주기 위해서는 해당 객체가 없어지거나 재생성되면 안 되겠죠?
그래서 gc 가 발생하는 힙이 아니라 메타스페이스에 할당을 해서 객체를 유지시켜 줍니다.
클래스가 로드될 때 메모리에 메타스페이스에 할당돼서 프로그램 시작부터 종료까지 남아있습니다. 즉 메모리가 항상 상주하고 있는 영역입니다.
때문에 인스턴스 생성 없이도 접근 가능하면 모든 인스턴스에 공유됩니다.
즉 공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메서드를 선언하고자 할 때 사용합니다.
- static 변수를 선언하면 클래스 로딩 시점에 메모리에 할당되고 모든 객체에서 공유됩니다.
- static 메서드는 인스턴스 생성 없이 클래스 이름으로 접근할 수 있습니다.
동적은 객체를 런타임 도중에 힙 영역에 할당하는 행위를 말합니다.
반대로, 정적은 프로그램이 시작되는 시점에 클래서 로더가 클래스를 해석하여 메서드 영역 혹은 힙 영역에 클래스 메타 데이터 및 정적 변수를 적재한다.
final 이란?
상수화 키워드로 해당 요소를 변경할 수 없도록 합니다.
특징
- 변수 : final로 선언된 변수는 초기화 후에 값을 변경할 수 없습니다. 주로 상수를 정의할 때 사용됩니다
- 메서드: final 로 선언된 메서드는 서브클래스에서 오버라이드 할 수 없습니다
- 클래스 : final 로 선언된 클래스는 자식 클래스로 확장시킬 수 없습니다.
요약
- stiatic 은 클래스 간의 공통적인 속성을 모든 인스턴스가 공유할 수 있도록 합니다.
- final 은 값을 변경할 수 없도록 상수화합니다.
'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 |