코딩 기록들
객체지향 프로그래밍 5. static 본문
static변수를 사용하는 경우
- 여러인스턴스가 공유하는 기준값이 필요한 경우
ex) 학생마다 새로운학번 생성, 새로운 사번 생성, 카드 발급할때마다 새로운 카드번호 부여
static변수 선언과 사용하기
static int serialNum;
- 처음 프로그램이 메모리에 로딩될때 메모리 할당 (인스턴스가 생성될때 만들어지는 변수가 아님)
-> 인스턴스생성과 상관없이 사용가능(static변수는 인스턴스에서 공통으로 사용하는 영역임) -> 클래스이름으로 직접참조할것
- = 클래스변수, 정적변수
static메소드 에서는 인스턴스 변수 사용불가능
- static메소드는 인스턴스 생성과 무관하게 클래스이름으로 호출 -> 인스턴스 생성 전 호출될수 있으므로 static메소드 내부에서는 인스턴스 변수를 사용할 수 없음
변수의 유효범위와 메모리
- 유효범위(scope)와 생성과 소멸(life cycle)은 변수종류마다 다름
- 지역, 멤버, 클래스 변수는 각각 유효범위와 사용메모리도 다름
- static변수 : 프로그램이 메모리에있는동안 계속 메모리차지하므로 너무 큰 메모리 할당 지양
- 클래스 내부의 여러메소드에서 사용하는 변수 -> 멤버변수로 선언
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
지역변수 (로컬변수) |
함수 내부 선언 | 함수 내부 | 스택 | 함수 호출시 생성/함수끝나면 소멸 |
멤버변수 (인스턴스변수) |
클래스 멤버변수로 선언 |
클래스 내부 (private 아니면 참조변수로 다른클래스에서 이용o) | 힙 | 인스턴스 생성시 생성/ 가비지 컬렉터가 메모리 수거시 소멸 |
static변수 (클래스변수) |
클래스 내부 | 클래스 내부 (private 아니면 클래스이름으로 다른클래스에서 이용o) | 데이터 영역 | 프로그램 처음시작시 생성/프로그램끝나고 메모리 해체시 소멸 |