코딩 기록들

객체지향 프로그래밍 5. static 본문

카테고리 없음

객체지향 프로그래밍 5. static

코딩펭귄 2023. 12. 9. 07:41
static변수를 사용하는 경우

- 여러인스턴스가 공유하는 기준값이 필요한 경우

ex) 학생마다 새로운학번 생성, 새로운 사번 생성, 카드 발급할때마다 새로운 카드번호 부여

 

static변수 선언과 사용하기

static int serialNum;

- 처음 프로그램이 메모리에 로딩될때 메모리 할당 (인스턴스가 생성될때 만들어지는 변수가 아님)

-> 인스턴스생성과 상관없이 사용가능(static변수는 인스턴스에서 공통으로 사용하는 영역임) -> 클래스이름으로 직접참조할것

- = 클래스변수, 정적변수

static메소드 에서는 인스턴스 변수 사용불가능

- static메소드는 인스턴스 생성과 무관하게 클래스이름으로 호출 -> 인스턴스 생성 전 호출될수 있으므로 static메소드 내부에서는 인스턴스 변수를 사용할 수 없음

 

변수의 유효범위와 메모리

- 유효범위(scope)와 생성과 소멸(life cycle)은 변수종류마다 다름

- 지역, 멤버, 클래스 변수는 각각 유효범위와 사용메모리도 다름

- static변수 : 프로그램이 메모리에있는동안 계속 메모리차지하므로 너무 큰 메모리 할당 지양

- 클래스 내부의 여러메소드에서 사용하는 변수 -> 멤버변수로 선언

변수 유형 선언 위치 사용 범위 메모리 생성과 소멸
지역변수
(로컬변수)
함수 내부 선언 함수 내부 스택 함수 호출시 생성/함수끝나면 소멸
멤버변수
(인스턴스변수)
클래스 멤버변수로
선언
클래스 내부 (private 아니면 참조변수로 다른클래스에서 이용o) 인스턴스 생성시 생성/
가비지 컬렉터가 메모리 수거시 소멸
static변수
(클래스변수)
클래스 내부 클래스 내부 (private 아니면 클래스이름으로 다른클래스에서 이용o) 데이터 영역 프로그램 처음시작시 생성/프로그램끝나고 메모리 해체시 소멸