공통으로 사용하는 변수가 필요한 경우 ?
여러 인스턴스가 공유하는 기준 값이 필요한 경우
Example >
- 학생마다 새로운 학번 생성
- 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여
- 회사에 사원이 입사할때 마다 새로운 사번이 필요한 경우
static int serialNum;
💡 static 변수의 정의
- 인스턴스가 생성될 때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당
- 클래스 변수, 정적변수라고도 함 (vs. 인스턴스 변수)
- 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조
💡 static 메서드의 정의
- static 메서드는 인스턴스 생성과 무관하게 클래스 이름으로 호출 될 수 있음
- 인스턴스 생성 전에 호출 될 수 있으므로 static 메서드 내부에서는 인스턴스 변수를 사용할 수 없음 ( this 사용 X )
💡 변수의 유효 범위와 메모리
변수유형 | 선언 위치 | 사용범위 | 메모리 | 생성과 소멸 |
지역 변수 (로컬 변수) |
함수 내부에 선언 | 함수 내부에서만 사용 | 스택 | 함수가 호출될 때 생성되고 함수가 끝나면 소멸 |
멤버 변수 (인스턴스 변수) |
클래스 멤버 변수로 선언 | 클래스 내부에서 사용하고 private가 아니면 참조 변수로 다른 클래스에서 사용가능. | 힙 | 인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할때 소멸. |
static 변수 (클래스 변수) |
static 예약어를 사용하여 클래스 내부 선언 | 클래스 내부에서 사용하고 private가 아니면 참조 변수로 다른 클래스에서 사용가능. | 데이터 | 프로그램이 처음 시작할때 상수(final)와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할때 소멸. |
'BackEnd > JavaProgram' 카테고리의 다른 글
[ JAVA ] 자바 배열 문법 1 / 1차원 배열과 2차원 배열 (0) | 2023.02.01 |
---|---|
[ JAVA ] 싱글톤 패턴 (Singleton pattern) (0) | 2023.02.01 |
[ JAVA ] 객체 간의 협력 / 예제 문제 풀어보기 (0) | 2023.01.30 |
[ JAVA ] this 레퍼런스 (0) | 2023.01.30 |
[ JAVA ] 접근 지정자와 캡술화, 정보 은닉 (1) | 2023.01.30 |