Static 변수
static멤버와 non-static 멤버의 차이
non-static 멤버 | static 멤버 | |
공간적 특성 | 객체마다 별도 존재 | 클래스당 하나 생성 • 멤버는 객체 내부가 아닌 별도의 공간(데이터 영역)에 생성 |
시간적 특성 | 객체 생성시에 멤버 생성됨 • 객체가 사라지면 멤버도 사라짐 |
클래스 로딩 시에 멤버 생성 • 프로그램이 종료될 때 멤버 사라짐 |
공유의 특성 | 공유되지 않음 • 객체 내에 각각 공간 유지 |
동일한 클래스의 모든 객체들에 의해 공유됨 |
static변수 객체 접근
public static void main(String []args){
1. StaticSample s1, s2;
2. s1 = new StaticSample();
3. s2.n = 5; // static 멤버 접근
}
1 : StaticSmaple.class 파일이 로딩 후 메모리에 올려진다.
JVM이 선언되어 있는 static 변수를 본 후 static 멤버의 메모리를 할당하는 과정이다.
2 : static 멤버들은 제외한 non-static 멤버들의 메모리를 할당 받는다.
s1은 non-static 멤버들이 할당된 힙 주소를 가리키게 된다. 하지만 static 멤버들도 포함한다.
static 멤버들은 데이터 영역에 생기고, non-static 멤버들은 힙 영역에 생긴다
3 : 객체 레퍼런스를 통해 바로 static 멤버에 접근할 수 있다. 하지만 클래스 네임으로 접근하는 것을 권장한다.
클래스 접근
public static void main(String []args){
1. StaticSample.m = 10;
}
1 : StaticSmaple.class 파일이 로딩 후 메모리에 올려진다.
static 멤버들이 할당되었기 때문에 바로 접근할 수 있다.
static의 활용
- 전역 변수와 전역함수를 만들 때 활용
- 공유 멤버를 작성할 때
static 메소드의 제약 조건
제약 1. static 메소드에서는 static 변수만 사용가능하다.
이유 : 객체가 생성되지 않은 상황에서도 static 메소드가 실행될 수 있기 때문
제약 2. static 메소드는 this 사용 불가
이유 : static 메소드는 객체가 생성되기 전에 접근이 가능하므로, 현재 객체를 가리키는 this 레퍼런스는 사용할 수 없다.
Final 클래스와 메소드
final 클래스 - 클래스 상속 불가
의도 : 상속 받는 것 원치 않을 때
final 메소드 - 오버라이딩 불가
의도 : 상속받아도 오버라이딩 하지마. 반드시 내 것 써야해
final 필드 - 상수 선언
의도 : 선언 시에 초기값 무조건 지정. 또한 값 바꿀 수 없음
'CS > 자바' 카테고리의 다른 글
[Java] String의 split() 메소드 뜯어보기 (0) | 2025.01.19 |
---|---|
[Java] 제네릭 - Generic (1) | 2024.12.03 |
자바 #5 - 생성자와 접근 지정자 (1) | 2024.02.09 |
자바 #4 - 객체지향 언어의 특징 (0) | 2024.02.07 |
자바 #3 - 자바의 배열과 예외 처리 (1) | 2024.02.04 |