본문 바로가기

Java

static과 final

이 녀석들...  static과 final 헷갈리지 말자.

 

static

 

어디서 많이 보지 않았나요. 그 녀석 맞아요.

public class Main{
   public static void main(String[] args){
   
   }
}

 

네 main에 붙어있습니다. 

 

  • static 멤버는 클래스에 속하며, 클래스의 모든 인스턴스가 해당 멤버를 공유한다.
  • 클래스가 메모리에 로드될 때 static 멤버가 초기화된다.
  • static 멤버는 클래스 이름을 통해 직접 접근이 가능하다. 

이게 무슨 소리게요? 클래스에서 공유되는 멤버라는 뜻이에요. 예를 들어 Car 클래스가 있고 new myCar해서 내 차 색상은 검정이야. new yourCar해서 니 차 색상은 흰색이야. 근데 색상은 static 멤버야 그러면 각각 가질 수 없다는 거지.

 

그냥 내 차가 흰색이면 니 차도 흰색이고, 니 차가 검정이면 내 차도 검정이 된다. 이런 말이에요. 왜? 클래스 레벨에서 하나만 존재해서 동일한 메모리 위치를 참조하기 때문이지.

 

참고로 static 안 붙은 멤버를 인스턴스 멤버라고 합니다. 얘는 독립적인 값을 가질 수 있어요. 

 

final 

  • 변경할 수 없는 멤버로 정의한다. 
final int finalInt = 10; // final 변수 -> 변경 불가

public final void finalMethod(){} // final 메서드 -> 오버라이딩 불가

public final class FinalClass{} // final 클래스 -> 상속 불가

 

이제 안헷갈려.

 

종종 static final 같이 쓰는 경우 보셨죠?

public class Constatns{
   public static final int MAX_VALUE= 100;
}

 

MAX_VALUE는 클래스 수준에서 변하지 않는 상수를 의미한다. 모든 인스턴스에서 동일한 값을 가지며 변경할 수 없는 값으로 유지된다.

'Java' 카테고리의 다른 글

형 변환 / valueOf() / stream  (0) 2024.06.07
String / StringBuilder / StringBuffer  (1) 2024.06.07
Class, Object, Instance  (0) 2024.06.05
Java 메모리 - Stack, Heap, Method(Static)  (0) 2024.06.03
Java 자료구조 - 배열과 리스트  (0) 2024.06.02